2013-07-25 62 views
5
Log::info('Sending email', array(
    'title' => $attributes['title'], 
    'recipient' => $attributes['email'] 
)); 

Mail::queue('emails.welcome', $attributes, function($message) use ($attributes) 
{ 
    $message 
     ->to($attributes['email']) 
     ->subject($attributes['title']); 
}); 

問題出在關閉被傳遞給Mail::queue。怎麼了?這與in the docs完全相同。發送排隊郵件時不允許「封閉」序列化

+1

你的'$ attributes'變量是什麼?它是否包含「Paginator」對象?你能爲我們「var_dump」嗎? – fideloper

+0

這是確切的錯誤? '不允許'關閉序列化'? –

回答

1

那麼,我假設$attributes是你想要傳遞給電子郵件視圖welcome。如果是這樣,那麼你需要把它放在一個數組中。在這種情況下,應該是這樣的:

Mail::queue('emails.welcome', array('attributes' => $attributes), function($message) use ($attributes) 
{ 
    $message 
     ->to($attributes['email']) 
     ->subject($attributes['title']); 
}); 

...這可能適合你! :D

+0

現在我如何訪問這些屬性? – Fractaliste

+0

@Fractaliste ...因爲它是一個數組,它實際上是! :D –

+1

「屬性」鍵在視圖內成爲var名稱。比方說,爲了爭論,我有這個'array('atrr'=> $ attributes);',那麼我必須在視圖內調用它們,''atrr ['email' ]'。得到它了? –

1

我遇到了同樣的錯誤信息。我的問題是我的$屬性是一個Eloquent模型,我猜這是不可序列化的。我不得不改變:

Mail::queue('emails.welcome', array('attributes' => $attributes), function($message) use ($attributes)

$attrArray = $attributes->toArray(); Mail::queue('emails.welcome', array('attributes' => $attributes), function($message) use ($attrArray)

0

我知道這個職位是舊的,但最近我得到這個錯誤以及。原因是在郵件隊列回調中放入了一個$ request實例。

Mail::queue('emails.welcome',$data,function(){ 

$email = $request->input('email'); // <- apparently this will cause a closure error 


}); 

我也從搜索中瞭解到,您不能將非序列化的數據放入關閉中。這包括雄辯的模型或對象。

-1

問題是在閉包中使用$ this。查看文件SerializableClosures.php和函數serialize()。 $ this-> to和$ this-> subject是對類的字段的引用,而不是在Closure中,所以要修復代碼,您必須使它們成爲局部變量並將它們傳遞給閉包。

相關問題