Php Laravel Mailable队列,如何将自定义数据传递给MessageSent事件
我正在使用Laravel Mailable发送电子邮件,我想记录成功发送的电子邮件 Laravel Mailable具有在发送电子邮件后激发的默认事件 所以我把我的听众吸引到这个事件上Php Laravel Mailable队列,如何将自定义数据传递给MessageSent事件,php,laravel-mail,laravel-events,Php,Laravel Mail,Laravel Events,我正在使用Laravel Mailable发送电子邮件,我想记录成功发送的电子邮件 Laravel Mailable具有在发送电子邮件后激发的默认事件 所以我把我的听众吸引到这个事件上 protected $listen = [ 'App\Events\Event' => [ 'App\Listeners\EventListener', ], 'Illuminate\Mail\Events\MessageSent'
protected $listen = [
'App\Events\Event' => [
'App\Listeners\EventListener',
],
'Illuminate\Mail\Events\MessageSent' => [
'App\Listeners\LogSentEmailNotification',
],
];
侦听器处理程序
public function handle(MessageSent $event)
{
//get extra data
$job_request_id = $event->message->job_request_id;
$message = $event->message;
$data = [
'job_request_id' => $job_request_id,
'to' => $message->getHeaders()->get('To'),
'from' => $message->getHeaders()->get('From'),
'cc' => $message->getHeaders()->get('Cc'),
'bcc' => $message->getHeaders()->get('Bcc'),
'subject' => $message->getHeaders()->get('Subject')->getFieldBody(),
'body' => $message->getBody(),
];
$email_notification_log = $this->email_notification_log->create($data);
}
额外的数据作业\u请求\u id是从Mailable类CustomEmailNotification.php中的build()方法传递的
class CustomEmailNotification extends Mailable implements ShouldQueue
{
public function build()
{
$job_request_id = 1;
//pass extra data mail message
$this->withSwiftMessage(function ($message) use($job_request_id){
$message->job_request_id = $job_request_id;
});
}
}
现在,Listener类上的这一行在没有queue的情况下运行良好,但是当使用queue时,它将返回null
//get extra data
$job_request_id = $event->message->job_request_id;
var_dump($job_request_id);
//null when using queue
问题是,在使用队列时,将自定义数据传递给MailSent事件的正确方法是什么
或者,在使用queue并传递给WithWiftMessage()时,作业请求id是否可能丢失,因此事件侦听器刚刚收到空值
如果您使用主管作为队列工作人员,请感谢。尝试重新启动所有进程。必须重新加载Supervisor以反映代码最近的更改
sudo supervisorctl restart all
也许这对你有帮助
根据这篇文章,当您将邮件放入队列时,变量将丢失,因此您必须覆盖邮件的发送方法,邮件上的任何
public
属性都将保存到事件中的数据属性中
class CustomEmailNotification extends Mailable implements ShouldQueue
{
public $job_request_id = 1;
}
现在,在侦听器中,您可以将属性名称作为数据的数组索引
var_dump($event->data['job_request_id']);