【发布时间】:2019-03-06 03:41:04
【问题描述】:
我已在app/Notifications 中创建此通知:
class StatisticsExportNotification extends Notification implements ShouldQueue
{
use Queueable;
use EmailNotificationViewHTMLTrait;
protected $links;
/**
* Create a new notification instance.
*
*/
public function __construct($links)
{
$this->links = $links;
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
return [
MailChannel::class
];
}
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
list($subject, $viewData) = $this->getNotificationViewHTML('statistics_export', $notifiable, ['links' => $this->links]);
return (new MailMessage())
->subject($subject)
->view('mail.main', compact('viewData'));
}
}
我正在尝试这样发送:
$member->notify(
new StatisticsExportNotification('testing')
);
现在,电子邮件 HTML 模板的内容只是:
{{links}}
但我已经确认,如果 HTML 只是一个硬编码字符串并且我不尝试将任何变量传递给它,则会出现同样的问题。
那个问题是,在我看来 toMail 方法在这里根本没有被调用。当我在类构造函数中执行logger()->debug($links) 时,它会记录变量的值。但是当我在toMail() 中执行logger()->debug('test') 时,它不会记录任何内容!
如果我在方法中对主题和内容进行硬编码,则没有区别:
public function toMail($notifiable)
{
$subject = "foo";
$viewData = ["test" => "bar"];
return (new MailMessage())
->subject($subject)
->view('mail.main', compact('viewData'));
}
无论我做什么,系统都会将通知发送到会员的邮箱,但主题是“统计导出通知”,邮件正文为空!
getNotificationViewHTML 所做的是获取消息模板并使用我们传递给它的数据填充它,但同样,这段代码似乎根本没有发挥作用。我也尝试在该方法中添加日志记录,甚至放入我知道如果执行会引发错误的代码,但无论我做什么,通知都会以相同的默认主题和相同的空正文发送。
【问题讨论】:
-
你试过重启队列并运行 php artisan config:cache 吗?
-
不,但这有什么帮助?我之前已经添加/编辑过通知,不需要重新启动任何东西。
-
因为队列进程在你启动它后没有得到那个 cahnges。因此,当您重新启动它时,队列进程将加载更新的配置。我会建议尝试一次。
-
试过了,没用。
-
您可以在邮件模板中尝试使用 {{{ }}} 而不是 {{ }} 吗?
标签: laravel