我想在资源控制器类声明的上方包含一些注释的代码,理想情况下是在使用php artisan make:controller MyController -resource
生成控制器时添加这些代码。即,我想在每个控制器文件的顶部添加路径别名:
/*
Verb URI Action Route Name desc
GET /photos index photos.index Display a listing of the resource.
GET /photos/create create photos.create Show the form for creating a new resource.
POST /photos store photos.store Store a newly created resource in storage.
GET /photos/{photo} show photos.show Display the specified resource.
GET /photos/{photo}/edit edit photos.edit Show the form for editing the specified resource.
PUT/PATCH /photos/{photo} update photos.update Update the specified resource in storage.
DELETE /photos/{photo} destroy photos.destroy Remove the specified resource from storage.
*/
这纯粹是一个方便的示例,但是有时我想将其他内容添加到由工匠生成的模型和迁移中。能做到吗?我需要重新编译工匠二进制文件吗?
答案 0 :(得分:2)
这有点棘手,但是如果您知道如何在容器周围找到自己的出路,那应该没事。
首先,您必须扩展默认的ArtisanServiceProvider
并更改此方法。
/**
* Register the command.
*
* @return void
*/
protected function registerControllerMakeCommand()
{
$this->app->singleton('command.controller.make', function ($app) {
return new ControllerMakeCommand($app['files']);
});
}
这样做,您只需允许自己在容器中分配自定义ControllerMakeCommand
。
然后,您只需复制该类并更改所需的代码即可。
您的存根文件。
/**
* Get the stub file for the generator.
*
* @return string
*/
protected function getStub()
{
$stub = null;
if ($this->option('parent')) {
$stub = '/stubs/controller.nested.stub';
} elseif ($this->option('model')) {
$stub = '/stubs/controller.model.stub';
} elseif ($this->option('invokable')) {
$stub = '/stubs/controller.invokable.stub';
} elseif ($this->option('resource')) {
$stub = '/stubs/controller.stub';
}
if ($this->option('api') && is_null($stub)) {
$stub = '/stubs/controller.api.stub';
} elseif ($this->option('api') && ! is_null($stub) && ! $this->option('invokable')) {
$stub = str_replace('.stub', '.api.stub', $stub);
}
$stub = $stub ?? '/stubs/controller.plain.stub';
return __DIR__.$stub;
}
当然,您必须复制存根文件并根据需要对其进行编辑。