一、背景知识
- laravel中的
make:controller
的源码位置如下:vendor\laravel\framework\src\Illuminate\Routing\Console\ControllerMakeCommand.php
- 其他的生成命令的位置如下:
vendor\laravel\framework\src\Illuminate\Foundation\Console
- 类模板文件
Console\stubs
里面的文件,就是存储类模板目录,以.stub
结尾。
controller.plain.stub
该文件就是make:controller
生成的类的模板。 - Stub 定制
如果你只是想定制官方类的生成方式,可以参考官方文档Stub 定制解决。
二、自定义make方法
- 生成命令文件
初次使用,可以使用生成命名的方式,生成命令文件,然后,再按照要求更改即可。
这样就在php artisan make:command BuildUtils
app\Console\Commands
生成了一个BuildUtils.php
文件。 - 修改继承类以及内部代码
把继承类修改成GeneratorCommand
,该类的命名空间为Illuminate\Console\GeneratorCommand
。 - Stub的目录
自己的Stub
的目录,我存放在[根目录]\stubs
文件夹下面。名称为utils.plain.stub
。
三、成品示例
这是我修改的生成工具类的命令
<?php
namespace App\Console\Commands;
use Illuminate\Console\GeneratorCommand;
class BuildUtils extends GeneratorCommand
{
/**
* The console command name.
*
* @var string
*/
protected $name = 'make:utils';
/**
* The console command description.
*
* @var string
*/
protected $description = '创建一个utils类';
/**
* The type of class being generated.
*
* @var string
*/
protected $type = 'Controller';
/**
* Get the stub file for the generator.
*
* @return string
*/
protected function getStub()
{
return $this->laravel->basePath('/stubs/utils.plain.stub');
}
/**
* Get the default namespace for the class.
*
* @param string $rootNamespace
* @return string
*/
protected function getDefaultNamespace($rootNamespace)
{
return $rootNamespace.'\Utils';
}
}