2015-05-22 5 views
4

Я делаю команду, которая вызывается через контроллер. Когда я делаю простой пример команды и контроллер, как это, он работает:BindingResolutionException при использовании параметров конструктора в 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); 
} 

Когда я вызвать команду с помощью контроллера, я получаю «привет», который является правильным. Но когда я пытаюсь что-то передать через конструктор, я получаю исключение для исключения связи:

//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, но я получаю это исключение:

BindingResolutionException в строке Container.php 872: Разрешение неразрешимой зависимости [Параметр # 0 [$ name]] в классе App \ Commands \ TestCommand

ответ

2

Это из-за инъекции зависимости. Если вы использовали в своем объекте конструктора, например User $user или Guard $auth, Laravel вводит эти объекты в конструктор, чтобы у вас были эти свойства. Но Laravel не может вводить простые переменные типа, чтобы вы получили эту ошибку.

Вы также можете прочитать на странице docs:

Конечно, конструктор позволяет передавать любые соответствующие объекты командование, в то время как метод ручки выполняет команду.

поэтому он не будет работать для необъектных paramters

+0

облом. Спасибо за помощь. –