Em um projeto recente, precisei criar muitas Classes de repositório, mas na lista de comandos do artisan:make não havia nenhuma opção para construir uma classe ou um stub, então decidi criar um personalizado, que adiciona o comando make:repository.
Muitos podem estar passando por uma situação parecida com a minha. Por isso, resolvi trazer um breve artigo mostrando como criar um arquivo base para ser gerado através do artisan do Laravel.
Note que alguns arquivos, funções e classes estarão com o nome em inglês. Isso acontece porque esse código é real. Ou seja, eu realmente estou utilizando no meu dia a dia (tenho o costume de utilizá-los em inglês).
Construindo nosso comando
Primeiro precisamos criar um stub genérico que servirá como base. Crie um arquivo chamado make-repository.stub – esse arquivo será colocado no diretório app/Console/Commands/Stubs/make-repository.stub com o seguinte conteúdo:
<?php
namespace App\Repositories;
class GenericRepository
{
public function insertOrChangeData()
{
}
public function removeData()
{
}
}
Em seguida, crie uma classe de comando digitando php artisan make:command MakeRepository
em seu terminal. Este arquivo estará no diretório app/Console/Commands. Substitua o conteúdo pelas linhas a seguir:
<?php
namespace App\Console\Commands;
use Illuminate\Console\GeneratorCommand;
use Symfony\Component\Console\Input\InputArgument;
class MakeRepository extends GeneratorCommand
{
/**
* O nome e a assinatura do comando do console.
*
* @var string
*/
protected $name = 'make:repository';
/**
* A descrição do comando do console.
*
* @var string
*/
protected $description = 'Create a new repository class';
/**
* O tipo de classe sendo gerada.
*
* @var string
*/
protected $type = 'Repository';
/**
* Substitui o nome da classe para o stub fornecido.
*
* @param string $stub
* @param string $name
* @return string
*/
protected function replaceClass($stub, $name)
{
$stub = parent::replaceClass($stub, $name);
return str_replace('GenericRepository', $this->argument('name'), $stub);
}
/**
* Obtpem o arquivo stub para o gerador.
*
* @return string
*/
protected function getStub()
{
return app_path() . '/Console/Commands/Stubs/make-repository.stub';
}
/**
* Obtém o namespace padrão para a classe.
*
* @param string $rootNamespace
* @return string
*/
protected function getDefaultNamespace($rootNamespace)
{
return $rootNamespace . '\Repositories';
}
/**
* Obtém os argumentos do comando do console.
*
* @return array
*/
protected function getArguments()
{
return [
['name', InputArgument::REQUIRED, 'The name of the repository.'],
];
}
}
Uso
Vamos criar um repositório simples na linha de comando:
php artisan make:repository ClientRepository
Depois de rodar o comando acima teremos em App\Repositories o arquivo ClientRepository.
Saber como desenvolver um comando personalizado para o Artisan do Laravel é muito útil na hora de acelerar processos repetitivos e criar arquivos que tenham a mesma base de código.
Experimente fazer a instalação de um projeto Laravel e criar comandos personalizados para praticar. Deixe nos comentários sua sugestão de um comando que você consideraria útil para batermos um papo.