我正在制作一个通过控制器调用的命令。当我像这样做一个简单的示例命令和控制器时,它可以工作:
//Controller
$command = new TestCommand();
$this->dispatch($command);
//Command
public $name;
public function __construct()
{
$this->name = 'hi';
}
public function handle(TestCommand $command)
{
dd($command->name);
}
当我通过控制器调用命令时,我得到'hi'这是正确的。但是当我尝试通过构造函数传递某些东西时,我得到了绑定解析异常:
//Controller
$command = new TestCommand('hi');
$this->dispatch($command);
//Command
public $name;
public function __construct($name)
{
$this->name = $name;
}
public function handle(TestCommand $command)
{
dd($command->name);
}
这是为什么?我所做的看起来与我在Laravel文档示例中找到的相同,但我得到了这个例外:
Container.php第872行中的BindingResolutionException:类App \ Commands \ TestCommand中无法解析的依赖项解析[Parameter#0 [$ name]]
答案 0 :(得分:2)
这是因为依赖注入。如果您在构造函数对象中使用了User $user
或Guard $auth
,Laravel会将这些对象注入构造函数,因此您可以设置此属性。但是Laravel无法注入简单的类型变量,因此您会收到此错误。
您还可以在docs页面上阅读:
当然,构造函数允许您将任何相关对象传递给 该命令,而handle方法执行命令。
因此它不适用于非对象参数