【问题标题】:Mail::queue Closure serialization error Laravel 5.1Mail::queue Closure 序列化错误 Laravel 5.1
【发布时间】:2015-10-20 04:27:05
【问题描述】:

我保证这不仅仅是另一个 Mail::queue 新手问题。我有使用 Iron.io 推送队列的 Laravel 4.2 应用程序 然后,我升级到 Laravel 5.1,我的邮件就停止工作了。我有 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 放在处理器应用程序中,但仍然出现相同的错误

【问题讨论】:

  • 上面代码中UserController的用法在哪里可以理解错误的具体含义,能否详细说明上面的代码以便更好地理解?
  • UserController 在 App\Http\Controllers 中排队和接收应用程序,命名空间被注释掉。 RouteServiceProvider 有 protected namespace='';

标签: php laravel serialization closures iron.io


【解决方案1】:

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

然后我在handle方法中Mail::send。

正如他们在 Laravel 文档中所说的那样,我使用控制器 $this->dispatch 方法解雇了这项工作

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2018-08-01
      • 2016-10-19
      • 1970-01-01
      • 2016-03-02
      • 2014-11-28
      • 1970-01-01
      • 2017-12-14
      • 2017-09-23
      • 1970-01-01
      相关资源
      最近更新 更多