【发布时间】:2021-11-03 17:30:20
【问题描述】:
我正在尝试使用 ShouldQueue 发送电子邮件,并将数据传递到电子邮件刀片视图,但如果我实施 ShouldQueue 则会失败。
请参阅下面的代码。 下面的代码会执行邮件并将其放入作业队列(数据库驱动程序)中。它有效,我可以在作业表中看到该作业。
然后我运行 php artisan queue:work 在我的计算机上启动 worker。 当工人尝试执行作业时,它会失败。它现在已从作业表中删除,并在 failed_jobs 表中添加了新条目。电子邮件未发送。
在 failed_jobs 表的异常列中,我收到此错误(已删除堆栈跟踪)
Next Facade\Ignition\Exceptions\ViewException:/Users/xxx/xxx/xxx/ 中的未定义变量 $data(查看:/Users/xxx/xxx/xxx/resources/views/mails/ContactForm.blade.php)资源/视图/邮件/ContactForm.blade.php:2
如果我从 ContactFormMail 类中删除“implements ShouldQueue”,则一切正常,并且正在发送电子邮件,但随后电子邮件并未被放入队列中。
我已经尝试过在Laravel docs 中描述的两种方式传递数据,并且我也尝试过重新启动worker。
任何想法我哪里出错了? 如果不清楚,我想将数据传递给 ContactForm.blade.php 并将电子邮件放入队列中。
这是我的代码
控制器:
public function submit()
{
$this->validate();
$data = [
'name' => $this->name,
'email' => $this->email,
'message' => $this->message,
];
try {
Mail::to('xxx@xxx.xx')->send(new ContactFormMail($data) );
$this->name = "";
$this->email = "";
$this->message = "";
$this->status = "Message sent!";
} catch (Exception $e) {
$this->status = "Something went wrong!";
}
}
ContactFormMail 类:
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
class ContactFormMail extends Mailable implements ShouldQueue
{
use Queueable, SerializesModels;
public $data;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct($data)
{
$this->data = $data;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->view('mails.ContactForm');
}
}
ContactForm 刀片文件:
<div>
{{$data['name']}}<br>
{{$data['email']}}<br>
{{$data['message']}}<br>
</div>
【问题讨论】:
-
markdown 代替视图 return $this->markdown('mails.ContactForm')->subject('your mail subject');