Laravel 打包自定义迁移命令
Laravel package custom migration command
我想制作一个包,它使用自定义存根来创建我的包所需的迁移。更准确地说,运行 该命令应该为具有特定特征的模型制作数据透视表。
如果我发出 "normal" 命令,我可以在我的服务提供商中注册它:
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
,我需要找到一种方法来为其提供自定义存根路径而不中断 "regular" 迁移存根.
我试过这样做但失败了:
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);
});
}
我知道注册命令不应该像这样运行,因为我只是将单例注册到 Laravel app
实例,但我不知道如何通过 class,同时确保注入正确版本的 MigrationCreator
。我有点卡在这里,有办法吗?
原来一切正常,我只需要更换
protected $name = 'custom:make-container';
和
protected $signature = 'custom:make-container';
我想制作一个包,它使用自定义存根来创建我的包所需的迁移。更准确地说,运行 该命令应该为具有特定特征的模型制作数据透视表。
如果我发出 "normal" 命令,我可以在我的服务提供商中注册它:
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
,我需要找到一种方法来为其提供自定义存根路径而不中断 "regular" 迁移存根.
我试过这样做但失败了:
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);
});
}
我知道注册命令不应该像这样运行,因为我只是将单例注册到 Laravel app
实例,但我不知道如何通过 class,同时确保注入正确版本的 MigrationCreator
。我有点卡在这里,有办法吗?
原来一切正常,我只需要更换
protected $name = 'custom:make-container';
和
protected $signature = 'custom:make-container';