发送排队邮件时不允许序列化“关闭”

时间:2013-07-25 22:34:05

标签: laravel laravel-4

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的内容完全相同。

4 个答案:

答案 0 :(得分:1)

好吧,我假设 $attributes是您尝试传递给电子邮件视图welcome的内容。如果是,所以你需要把它放在一个数组中。在那种情况下,应该是喜欢的东西:

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

......这可能对你有用! :d

答案 1 :(得分: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)

答案 2 :(得分:0)

我知道这篇文章很老但我最近也遇到了这个错误。原因是将$ request实例放入邮件队列回调中。

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

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


});

我还从搜索中了解到,您无法将不可序列化的数据放入闭包中。这包括雄辩的模型或对象。

答案 3 :(得分:-1)

问题是在闭包内使用$ this。查看文件SerializableClosures.php和函数serialize()。 $ this-&gt; to和$ this-&gt; subject是对Class上的字段的引用而不是Closure中的字段,因此要修复必须使它们成为局部变量并将它们传递给闭包的代码。