Back-End

7 fev, 2019

Laravel Artisan: como criar arquivos com comandos personalizados

Publicidade

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.