如何在Laravel Artisan生成的代码中添加更多内容?

时间:2019-08-27 05:04:01

标签: php laravel artisan

我想在资源控制器类声明的上方包含一些注释的代码,理想情况下是在使用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.
*/

这纯粹是一个方便的示例,但是有时我想将其他内容添加到由工匠生成的模型和迁移中。能做到吗?我需要重新编译工匠二进制文件吗?

1 个答案:

答案 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;
}

当然,您必须复制存根文件并根据需要对其进行编辑。