laravel 建立自定義的artisan make命令

kevinyan發表於2019-02-22

前言

我們在laravel開發時經常用到artisan make等命令來新建ControllerModelJobEvent等類檔案。 在Laravel5.2artisan make命令支援建立如下檔案:

  make:auth           Scaffold basic login and registration views and routes
  make:console        Create a new Artisan command
  make:controller     Create a new controller class
  make:event          Create a new event class
  make:job            Create a new job class
  make:listener       Create a new event listener class
  make:middleware     Create a new middleware class
  make:migration      Create a new migration file
  make:model          Create a new Eloquent model class
  make:policy         Create a new policy class
  make:provider       Create a new service provider class
  make:request        Create a new form request class
  make:seeder         Create a new seeder class
  make:test           Create a new test class
複製程式碼

不過,有時候預設的並不能夠滿足我們的需求, 比方我們在專案中使用的Respository模式來進一步封裝了Model檔案,就需要經常建立Repository類檔案了,時間長了就會想能不能通過artisan make:repository命令自動建立類檔案而不是都每次手動建立。

系統自帶的artisan make命令對應的PHP程式放在IlluminateFoundationConsole目錄下,我們參照IlluminateFoundationConsoleProviderMakeCommand類來定義自己的artisan make:repository命令。

建立命令類

appConsoleCommands資料夾下建立RepositoryMakeCommand.php檔案,具體程式如下:

namespace AppConsoleCommands;

use IlluminateConsoleGeneratorCommand;

class RepositoryMakeCommand extends GeneratorCommand
{
    /**
     * The console command name.
     *
     * @var string
     */
    protected $name = `make:repository`;

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = `Create a new repository class`;

    /**
     * The type of class being generated.
     *
     * @var string
     */
    protected $type = `Repository`;

    /**
     * Get the stub file for the generator.
     *
     * @return string
     */
    protected function getStub()
    {
        return __DIR__.`/stubs/repository.stub`;
    }

    /**
     * Get the default namespace for the class.
     *
     * @param  string  $rootNamespace
     * @return string
     */
    protected function getDefaultNamespace($rootNamespace)
    {
        return $rootNamespace.`Repositories`;
    }
}
複製程式碼

建立命令類對應的模版檔案

appConsoleCommandsstubs下建立模版檔案 .stub檔案是make命令生成的類檔案的模版,用來定義要生成的類檔案的通用部分
建立repository.stub模版檔案:

    namespace DummyNamespace;
    
    use AppRepositoriesBaseRepository;
    
    class DummyClass extends BaseRepository
    {
        
        /**
         * Specify Model class name
         * 
         * @return string
         */
        public function model()
        {
            //set model name in here, this is necessary!
        }
    }
複製程式碼

註冊命令類

將RepositoryMakeCommand新增到AppConsoleKernel.php

    protected $commands = [
        CommandsRepositoryMakeCommand::class
    ];
複製程式碼

使用命令

好了, 現在就可以通過make:repository命令來建立repository類檔案了

php artisan make:repository TestRepository

php artisan make:repository SubDirectory/TestRepository 
複製程式碼

相關文章