为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel 包自定义迁移命令

Laravel 包自定义迁移命令

PHP
杨__羊羊 2023-04-28 14:05:58
我想制作一个包,它使用自定义存根来创建我的包所需的迁移。更准确地说,运行命令应该为具有特定特征的模型制作数据透视表。如果我发出“正常”命令,我可以在我的服务提供商中注册它:public function boot(){    if ($this->app->runningInConsole()) {        $this->commands([            MakeContainerMigration::class,        ]);    }}然而,在这种情况下,我想重用 Laravel 的编码并省去重新发明轮子的麻烦。所以我的命令看起来像这样:class MakeContainerMigration extends MigrateMakeCommand{    protected $name = 'custom:make-container';    protected $description = '...';}由于MigrateMakeCommand没有定义存根,而是它的依赖项MigrationCreator,我需要找到一种方法来为其提供自定义存根路径,而不会破坏“常规”迁移存根。我尝试做这样的事情但失败了:public function register(){    $this->registerCreator();    $this->registerMigrateMakeCommand();    if ($this->app->runningInConsole()) {        $this->commands([            //MakeContainerMigration::class,            'custom.command.migrate.make'        ]);    }}protected function registerCreator(){    $this->app->singleton('custom.migration.creator', function ($app) {        return new MigrationCreator($app['files'], __DIR__ . '/stubs');    });}protected function registerMigrateMakeCommand(){    $this->app->singleton('custom.command.migrate.make', function ($app) {        $creator = $app['custom.migration.creator'];        $composer = $app['composer'];        return new MakeContainerMigration($creator, $composer);    });}我知道注册命令不应该像这样运行,因为我只是将单例注册到 Laravelapp实例,但我不知道如何通过类注册它,同时确保MigrationCreator注入正确的版本。我有点卡在这里,有办法吗?
查看完整描述

1 回答

?
长风秋雁

TA贡献1757条经验 获得超7个赞

结果一切正常,我只需要更换

protected $name = 'custom:make-container';

protected $signature = 'custom:make-container';


查看完整回答
反对 回复 2023-04-28
  • 1 回答
  • 0 关注
  • 114 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信