Laravel 5 如何从控制器传递数据到命令行?

4
我试图从控制器传递一个数组到我的命令中。请参阅下面的代码。
Queue::push(new SendReminderPush(),array('data' => $data));

然而当我调用这个命令时,总是会出现异常。

缺少参数1,因为App\Commands\SendReminderPush::handle()方法需要传入一个参数。

以下是命令类中的handle函数:

public function handle($data){
   foreach($data as $d){
    do something
   }
}

请帮助我。我做错了什么?


当您实例化一个类时,您传递的数据是否应该不是该类的参数?Queue::push(new SendReminderPush(['data' => $data])); 然后在构造函数中将它们分配给变量? - Joe
谢谢,那帮了我大忙! - OnurY
1个回答

5
在Laravel 5中,这实际上取决于$data是什么。如果它是一个数组,并且您希望Laravel自动映射它,您可以像这样操作:
$this->dispatchFromArray('App\Commands\SendReminderPush', $data);

假设你的$data也是这样的:

$data = array('name' => 'Test', 'email' => 'test@example.com');

在你的SendReminderPush中,你需要在构造函数中进行映射:
public function __construct($name, $email) {
   $this->name = $name;
   $this->email = $email;
}

您需要在命令行中处理它(如果是自处理命令),则应按照以下方式操作:
public function handle(){
   $this->doSomething($this->name);
}

我建议你更多地了解Laravel 5中的命令总线(Command Bus)。你可以在这里查看:此处

谢谢您的回答。我尝试了这个方法,但是出现了另一个异常。 未定义的属性:App\Commands\SendReminderPush::$device_token这是我的构造函数: public function __construct($device_token,$message) { $this->device_token=$device_token; $this->message=$message; } 这是我如何分配任务: $this->dispatchFromArray('App\Commands\SendReminderPush', $data); - OnurY
能否从句柄函数中访问这些数据,而不是从构造函数中访问?因为如果在构造函数参数中定义数据和在句柄函数参数中定义类依赖项,那么该类看起来会很奇怪! - Mahmoud Zalt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接