Laravel 9如何仅通过单一渠道发送通知?
解决方案
完全不用创建独立通知,直接在via方法里根据用户是否拥有邮箱地址动态返回对应的通知渠道列表即可,具体修改如下:
修改你的via方法,添加判断逻辑:
public function via($notifiable) { $channels = [WebPushChannel::class]; // 仅当用户存在邮箱地址时,加入邮件通知渠道 if (!empty($notifiable->email)) { $channels[] = MailChannel::class; } return $channels; }
这样处理后:
- 拥有邮箱的用户会同时收到Web Push和邮件通知
- 无邮箱的用户只会收到Web Push通知
你的toWebPush和toMail方法无需修改,Laravel会自动根据via返回的渠道列表,调用对应的通知生成方法;当邮件渠道不在列表中时,toMail方法不会被执行。
发送通知的代码$user->notify(new UserActivation());保持原样即可。
内容的提问来源于stack exchange,提问作者clover
相关产品推荐
相关产品推荐

