Lumen 自定义 make:controller 命令

  1. Lumen中把 artisan 中的一些命令给省略掉了;万一想用了,怎么办?没关系,为了方便使用我们自己来写一个吧!

  2. artisan make 命令对应的PHP程序放在 Illuminate\Foundation\Console 目录下,我们参照 Illuminate\Foundation\Console\ProviderMakeCommand 类来定义自己的 artisan make:controller 命令

一、创建命令类

\app\Console\Commands\ControllerMakeCommand.php 文件

<?php
namespace App\Console\Commands; 

use Illuminate\Console\GeneratorCommand;

class ControllerMakeCommand extends GeneratorCommand {
    /**
     * create a user defined controller.
     *
     * @var string
     */
    protected $name = 'make:controller';  // @todo:要添加的命令

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Create a new lumen controller '; // @todo: 命令描述

    /**
     * The type of class being generated.
     *
     * @var string
     */
    protected $type = 'Controller';  // command type

    /**
     * Get the stub file for the generator.
     *
     * @return string
     */
    protected function getStub() {
        return dirname(__DIR__) . '/stubs/controller.stub';  // @todo: 要生成的文件的模板
    }

    /**
     * Get the default namespace for the class.
     *
     * @param  string  $rootNamespace
     * @return string
     */
    protected function getDefaultNamespace($rootNamespace) {
        return $rootNamespace . '\Http\Controllers';//@todo:这里是定义要生成的类的命名空间
    }
}

二、创建命令类对应的模版文件

创建模版文件 app\Console\stubs\controller.stub 文件( make 命令生成的类文件的模版),用来定义要生成的类文件的通用部分: 用的时候把注释去掉

<?php

namespace  DummyNamespace; // 要生成类的命名空间

class DummyClass extends BaseController /*我这里继承的是BaseController */ 
{
    public function index() {  // 这里就是要生成的类文件的方法通用代码了
        # code...
    }

}
// 注意,这里后缀文件后缀名一定是stub!!!!!!!!!!!!!

三、注册命令类

ControllerMakeCommand 添加到 App\Console\Kernel.php

protected $commands = [
    Commands\ControllerMakeCommand::class,
];

四、执行命令试试成功了没有

php artisan make:controller v1/UserController

如果成功的话就会在v1目录下创建UserController.php文件

<?php

namespace  DummyNamespace; 

class DummyClass extends BaseController 
{
    public function index() {  
        # code...
    }

}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容