Mail :: queue Closure序列化错误Laravel 5.1

时间:2015-10-20 04:27:05

标签: php laravel serialization closures iron.io

我保证这不仅仅是另一个Mail :: queue新手问题。我有使用Iron.io Push队列的Laravel 4.2应用程序 然后,我升级到Laravel 5.1,我的Mails就停止了工作。我有UserController,我从中向注册人发送用户帐户验证电子邮件。

//Used for Mail
$data=['msg'=>$msg];
$details=array(
  'email'=>$email,
  'name'=>$name,
  'subject'=>$subject,
  'msg'=>$msg);
\Mail::queue(['text'=>'emails.contactus'],$data,
  function($message) use ($email,$name,$subject) {
    $message->from($email,$name);
    $message->to(Config::get('app.site_support'))->subject($subject);
});

使用密钥等正确配置Iron.io。我的邮件排队应用程序和队列处理应用程序是不同的。

我得到的错误是

[2015-10-19 18:12:32] production.INFO: Queue POST Item received  
[2015-10-19 18:12:32] production.ERROR: exception 'ErrorException' with message 'Class 'UserController' not found' in /var/www/app/vendor/jeremeamia/SuperClosure/src/SerializableClosure.php:130
Stack trace:
#0 [internal function]: Illuminate\Foundation\Bootstrap\HandleExceptions->handleError(2, 'Class 'UserCont...', '/var/www/app...', 130, Array)
#1 /var/www/app/vendor/jeremeamia/SuperClosure/src/SerializableClosure.php(130): Closure->bindTo(NULL, 'UserController')
#2 [internal function]: SuperClosure\SerializableClosure->unserialize('a:5:{s:4:"code"...')
#3 /var/www/app/vendor/laravel/framework/src/Illuminate/Mail/Mailer.php(300): unserialize('C:32:"SuperClos...')
#4 /var/www/app/vendor/laravel/framework/src/Illuminate/Mail/Mailer.php(286): Illuminate\Mail\Mailer->getQueuedCallable(Array)

看起来Mail :: queue正在序列化UserControl,这在队列/接收处理器应用程序中不可用。我尝试将UserController放在处理器应用程序中但仍然得到相同的错误

2 个答案:

答案 0 :(得分:0)

所以这只适用于另一个面临同样问题的可怜人。 经过大量搜索后,我使用了一个单独的Job类,它在其构造函数中发送电子邮件并获取$ data(用于查看模板数据)和$ details(指定电子邮件模板,'到'电子邮件地址和主题)

然后我邮件::发送句柄方法。

我使用Controllers $ this->调度方法解雇此作业,正如他们在Laravel文档中所述

答案 1 :(得分:0)

在将Laravel从4.2更新到5.1之后,您需要在composer.json中将IronMQ版本更新为“ 4. *”。 Laravel 5.1仅与IronMQ v4兼容。