2015-03-31 157 views
4

我想從我的控制器傳遞一個數組到我的命令。看到下面的代碼Laravel 5將數據從控制器傳遞到命令

Queue::push(new SendReminderPush(),array('data' => $data)); 

但是,當我呼叫命令我總是得到一個異常。

缺少參數1爲App \命令\ SendReminderPush ::手柄()

這是命令類我的把手功能:

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

請幫助我。我究竟做錯了什麼?

+0

你實例化時,你傳遞的數據是不是該類的參數? 'Queue :: push(new SendReminderPush(['data'=> $ data]));'然後將它們賦值給構造函數中的變量? – Joe 2015-03-31 15:54:27

+0

謝謝你,幫助我! – OnurY 2015-04-04 12:46:54

回答

4

在Laravel 5中,這實際上取決於$data是什麼。如果它是一個數組,你想有Laravel自動映射它,你會做這樣的事情:

$this->dispatchFromArray('App\Commands\SendReminderPush', $data); 

說你的$data看起來像這樣還有:

$data = array('name' => 'Test', 'email' => '[email protected]'); 

在你SendReminderPush那麼您需要映射在構造函數:

public function __construct($name, $email) { 
    $this->name = $name; 
    $this->email = $email; 
} 

你會再處理它的命令(如果它是一個自我調節指令)是這樣的:

public function handle(){ 
    $this->doSomething($this->name); 
} 

我會看看Command Bus如何在Laravel 5中工作。檢查出來here

+0

謝謝你的回答。我試過這一個,但我得到另一個例外。 未定義的屬性:應用程序\命令\ SendReminderPush :: $ device_token 這裏是我的構造函數: 公共職能__construct($ device_token,$消息) \t { \t \t $這個 - > device_token = $ device_token; \t \t $ this-> message = $ message; \t} 這就是我如何發送: $ this-> dispatchFromArray('App \ Commands \ SendReminderPush',$ data); – OnurY 2015-04-03 10:17:26

+0

好的解決了它:) – OnurY 2015-04-03 10:26:52

+0

是否有可能從句柄函數而不是構造函數訪問這些數據!只是因爲如果在構造函數參數中定義了handl函數時,類將看起來很奇怪,而在handl函數參數中定義了類依賴關係! – 2016-03-31 18:22:15

相關問題