在Laravel 5 Command中使用构造函数参数时出现BindingResolutionException

时间:2015-05-22 18:53:31

标签: php laravel command laravel-5

我正在制作一个通过控制器调用的命令。当我像这样做一个简单的示例命令和控制器时,它可以工作:

//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]]

1 个答案:

答案 0 :(得分:2)

这是因为依赖注入。如果您在构造函数对象中使用了User $userGuard $auth,Laravel会将这些对象注入构造函数,因此您可以设置此属性。但是Laravel无法注入简单的类型变量,因此您会收到此错误。

您还可以在docs页面上阅读:

  

当然,构造函数允许您将任何相关对象传递给   该命令,而handle方法执行命令。

因此它不适用于非对象参数