Laravel 通知。如果只有电子邮件地址可用,请发送电子邮件

问题描述 投票:0回答:2

目前,我正在使用 Laravel 5.7 项目

现在我正在发送 Laravel 通知(电子邮件、短信和 OneSignal 推送)

用户邮箱可选(手机登录)。 现在,如果用户只提供电子邮件地址,我想发送电子邮件。否则,我会发送短信,并且将始终发送推送通知(通过电子邮件和短信)。

在通知中我检查

    public function toMail($notifiable)
    {
        if($this->user->email != null){
           return $(new MailMessage())->subject(__('Received Test Email  :app_name', ['app_name' => app_name()]))->view('mail.testView');
        }
        return false;
    }

如果有电子邮件地址,则电子邮件发送成功,但如果没有电子邮件地址,则执行

return false
,并且队列失败,并重试再次发送。队列永远不会停止。

如果电子邮件地址不可用,如何不“排队电子邮件”?

php laravel laravel-5 notifications laravel-queue
2个回答
5
投票

您还可以在通知类的

via
方法中实现该检查,并仅当可通知实体具有电子邮件地址时才返回
['mail']
,否则返回一个包含您将通知用户的渠道的数组或一个空数组完全跳过通知。


1
投票

解耦紧密耦合的代码。在您拨打

notify()
Notification::send()
的地方,检查电子邮件是否存在。您应该在那里放置
if
声明并检查电子邮件是否存在。不在这个发送方法中。仅在您知道电子邮件存在后才拨打该电话。
toMail()
方法应该看起来像

public function toMail($notifiable)
{
    return (new MailMessage())->subject(__('Received Test Email  :app_name', ['app_name' => app_name()]))->view('mail.testView');
}

仅此而已。

toMail()
方法不应该负责检查电子邮件是否存在。 它的名字和功能也应该只是发送电子邮件。

© www.soinside.com 2019 - 2024. All rights reserved.