来自包命令的依赖注入
Dependency Injection from Package Command
我正在为我的包创建一个命令。
我的构造函数是:
public function __construct(\Artisan $artisan)
{
parent::__construct();
$this->artisan = $artisan;
}
受保护的 $artisan
属性当然存在。
在我的服务提供商register()
方法中,我尝试了几种注册命令的方法。
第一个:
$this->app['custom.command'] = $this->app->share(function ($app)
{
return new CustomCommand(new \Artisan);
});
$this->commands('custom.command');
第二个:
$this->app['custom.command'] = $this->app->share(function ($app)
{
return $app->make('CustomCommand');
});
$this->commands('custom.command');
正常情况下,它应该可以工作。但是,当我运行命令时,只要在 fire()
方法中运行 $this->artisan->call('migrate')
,我总是会收到 Call to undefined method Illuminate\Support\Facades\Artisan::call()
错误消息。
然而,当我写 \Artisan::call('migrate')
而不是 $this->artisan->call('migrate')
时,一切正常。
有人知道我做错了什么吗?
提前致谢。
我认为问题是你注入了 Artisan 的外观而不是 Artisan 本身。
尝试
public function __construct(Illuminate\Foundation\Artisan $artisan)
并在您的服务提供商中:
return new CustomCommand($app['artisan']);
我正在为我的包创建一个命令。
我的构造函数是:
public function __construct(\Artisan $artisan)
{
parent::__construct();
$this->artisan = $artisan;
}
受保护的 $artisan
属性当然存在。
在我的服务提供商register()
方法中,我尝试了几种注册命令的方法。
第一个:
$this->app['custom.command'] = $this->app->share(function ($app)
{
return new CustomCommand(new \Artisan);
});
$this->commands('custom.command');
第二个:
$this->app['custom.command'] = $this->app->share(function ($app)
{
return $app->make('CustomCommand');
});
$this->commands('custom.command');
正常情况下,它应该可以工作。但是,当我运行命令时,只要在 fire()
方法中运行 $this->artisan->call('migrate')
,我总是会收到 Call to undefined method Illuminate\Support\Facades\Artisan::call()
错误消息。
然而,当我写 \Artisan::call('migrate')
而不是 $this->artisan->call('migrate')
时,一切正常。
有人知道我做错了什么吗?
提前致谢。
我认为问题是你注入了 Artisan 的外观而不是 Artisan 本身。
尝试
public function __construct(Illuminate\Foundation\Artisan $artisan)
并在您的服务提供商中:
return new CustomCommand($app['artisan']);