Dev (Back & Front)ARTIGO

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
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.

Douglas Carlos MenAutor

Programador, Professor e Entusiasta da Tecnologia

Ver perfil