这是我的RequestMail.php文件:
protected $phone;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct(Request $request)
{
$this->request = $request;
$this->phone = $request->get('phone');
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->from('robot@bithub.tech')
->view('request')
->subject('Новая заявка на обмен криптовалют')
->with(['phone' => $this->phone]);
}
我的控制器:
Mail::to('request@domain.com')->queue(new RequestMail($request));
当我尝试排队邮件时,我收到以下错误:"'关闭'序列化不允许"
编辑更新了最终代码。
答案 0 :(得分:1)
如果使用队列,则无法序列化包含闭包的对象,这就是PHP的工作方式。每次将作业推送到队列时,Laravel将其属性序列化为可写入数据库的字符串,但匿名函数(例如,不属于任何类的函数)不能表示为字符串值,因此它们不能被序列化。因此,基本上当您将RequestMail
作业推送到队列时,Laravel会尝试序列化其属性,但$request
是包含闭包的对象,因此无法序列化。要解决此问题,您必须存储在RequestMail
类仅可序列化的属性中:
protected $phone;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct(Request $request)
{
$this->phone = $request->get('phone');
}
public function build()
{
return $this->from('robot@domain.com')
->view('request')
->subject('New request for exchange')
->with(['phone' => $this->phone]);
}
执行此类操作时,您只保留实际需要的$request
属性,在本例中为电话号码,即字符串,并且完全可序列化。
修改强> 我刚才意识到这是一个duplicate
编辑2 我已使用正确的请求参数检索编辑了代码,以供进一步参考。