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

Joe*_*nks 5 php command laravel 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);
}
Run Code Online (Sandbox Code Playgroud)

当我通过控制器调用命令时,我得到“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);
}
Run Code Online (Sandbox Code Playgroud)

为什么是这样?我所做的看起来与我在 Laravel 文档示例中发现的相同,但我得到了这个例外:

Container.php 第 872 行中的 BindingResolutionException:无法解析的依赖项解析类 App\Commands\TestCommand 中的 [Parameter #0 [ $name ]]

Mar*_*łek 2

这是因为依赖注入。如果你在构造函数中使用了类似的对象,User $user或者Guard $authLaravel 会将这些对象注入到构造函数中,那么你就设置了这个属性。但 Laravel 无法注入简单类型变量,因此您会收到此错误。

您还可以在文档页面上阅读:

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

所以它不适用于非对象参数