2013-07-25 5 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']); 
}); 

Problem dotyczy zamknięcia, które zostało przekazane do Mail::queue. Co jest nie tak? Dokładnie tak samo jest z in the docs.Serializacja "zamknięcia" nie jest dozwolona podczas wysyłania oczekujących w kolejce wiadomości

+1

Co zawiera zmienna '$ attributes'? Czy zawiera obiekt 'Paginator'? Czy możesz "var_dump" to dla nas? – fideloper

+0

Czy to jest dokładny błąd? "Serializacja" zamknięcia "jest niedozwolona"? –

Odpowiedz

1

Założę się, że to , że $attributes jest coś, co próbujesz przekazać do widoku e-mail welcome. JEŚLI to jest, więc musisz umieścić go w tablicy. W takim przypadku powinno być coś mniejszego niż:

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

... to może działać! : D

+0

Jak mam teraz uzyskać dostęp do tych atrybutów? – Fractaliste

+0

@Fractaliste ... ponieważ to była tablica, która tak naprawdę jest! : D –

+1

Klucz "attributes" staje się nazwą var wewnątrz widoku. Powiedzmy, ze względu na argument, że mam tę tablicę ("atrr" => $ atrybuty) ;, wtedy musiałbym wywołać je wewnątrz widoku w ten sposób '$ atrr ['email' ] '. Rozumiem? –

1

Wystąpił ten sam komunikat o błędzie. Mój problem polegał na tym, że moje atrybuty $ były modelem Eloquent, który, jak sądzę, nie jest możliwy do serializacji. Musiałem zmienić:

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

do

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

0

Znam ten post jest stary, ale ja niedawno dostał ten błąd również. Przyczyną było umieszczenie instancji $ request wewnątrz wywołania kolejki mailowej.

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

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


}); 

Nauczyłem się również z wyszukiwania, że ​​nie można umieszczać danych nieprywatyzowalnych w zamknięciach. To obejmuje wymowne modele lub przedmioty.

-1

Problem polega na użyciu $ this wewnątrz zamknięcia. Sprawdź plik SerializableClosures.php i funkcja serialize(). $ this-> to i $ this-> subject to odniesienia do pól na Klasy, a nie do Zamknięcia, więc aby naprawić kod, musisz wprowadzić zmienne lokalne i przekazać je do zamknięcia.

Powiązane problemy