Laravel Artisan: como criar arquivos com comandos personalizados
Neste artigo, Douglas Carlos Men apresenta um passo a passo mostrando como criar um arquivo base para ser gerado através do artisan do Laravel.
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 ClientRepositoryDepois 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.









