Laravel中如何为artisan命令生成的控制器默认添加自定义方法
Laravel 自定义
make:controller 生成默认方法的实现方案 推荐优先使用方案1,改动最小、维护成本最低
方案1:修改控制器生成 stub 模板
这是最通用的实现方式,直接修改Laravel的代码生成模板即可:
- 首先执行命令发布Laravel自带的生成器模板文件到项目本地:
php artisan stub:publish - 命令执行完成后,项目根目录会生成
stubs文件夹,找到对应控制器模板:- 普通控制器修改
controller.stub - 资源控制器修改
controller.api.stub/controller.resource.stub - 单方法控制器修改
controller.invokable.stub
- 普通控制器修改
- 打开选中的stub模板文件,在类的内部末尾位置添加自定义的details方法,示例内容:
public function details() { // 此处可填入你需要默认生成的方法逻辑 } - 保存模板文件后,后续所有通过
php artisan make:controller生成的对应类型控制器,都会自动携带这个自定义方法。
方案2:自定义控制器生成命令
适合需要根据不同场景动态生成不同自定义方法的复杂需求:
- 执行命令生成自定义命令类:
php artisan make:command MakeControllerCommand - 打开生成的
app/Console/Commands/MakeControllerCommand.php文件,继承Laravel原生的控制器生成类,重写类构建方法注入自定义逻辑,示例代码:<?php namespace App\Console\Commands; use Illuminate\Routing\Console\ControllerMakeCommand as BaseControllerMakeCommand; class MakeControllerCommand extends BaseControllerMakeCommand { protected $signature = 'make:controller {name} {--resource} {--api} {--invokable} {--model=}'; protected function buildClass($name) { $stub = parent::buildClass($name); // 注入自定义details方法 $customMethod = <<<PHP public function details() { // 默认逻辑 } PHP; return str_replace('}', $customMethod . PHP_EOL . '}', $stub); } } - 到
app/Providers/AppServiceProvider.php的boot方法中注册自定义命令,覆盖原生的make:controller:public function boot() { $this->app->extend('command.make.controller', function ($original, $app) { return new \App\Console\Commands\MakeControllerCommand($app['files']); }); } - 配置完成后即可按照你自定义的逻辑生成控制器。
注意:如果使用Laravel 8及更早版本,stub文件路径、生成类命名空间可能存在小差异,调整对应路径即可。
内容的提问来源于stack exchange,提问作者sajjad
相关产品推荐
相关产品推荐

