什么是 Notification
Laravel 的通知(Notification)系统提供了统一的 API,可以向邮件、SMS、Slack、数据库等多个渠道发送通知。 Mail 与 Notification 的区别
像“发票已支付”这类需要向多个渠道发送同一条通知的场景,Notification 更合适。
创建 Notification 类
使用make:notification Artisan 命令生成通知类。
app/Notifications/。类中包含 via() 方法以及为各个渠道生成消息的方法。
发送通知的方式
使用 Notifiable trait
App\Models\User 默认已经包含了 Notifiable trait,可以用 notify() 方法发送通知。
Notifiable trait 并不限于 User 模型,任何模型都可以添加它。使用 Notification Facade
要同时向多个用户发送,可以使用Notification Facade。
sendNow()。
指定发送渠道
via() 方法以数组形式返回要使用的渠道。
邮件渠道通知
toMail() 方法返回一个 MailMessage 实例。
MailMessage 的常用方法如下:
如果是错误通知,可以加上
error(),按钮会变红。
Markdown 通知邮件
也可以使用 Markdown 编写更丰富的邮件。加上--markdown 选项生成类。
toMarkdownMail() 代替 toMail()。
数据库渠道通知
数据库渠道可以把通知保存到数据库,并在应用 UI 中展示。准备表结构
先创建notifications 表。
定义 toArray 方法
toArray() 方法以数组形式返回要保存的数据。
notifications 表的 data 列中。
获取通知
Notifiable trait 提供 notifications 关联,可用于读取通知。
unreadNotifications。
标记为已读
使用markAsRead() 将通知标为已读。
通知的队列化
如果通知发送耗时较长,可以实现ShouldQueue 接口并使用 Queueable trait,将通知放到队列中。make:notification 生成的类默认已经导入了它们。
ShouldQueue 后,调用 notify() 时通知会自动进入队列。
同时向多个渠道发送
只要在via() 中返回多个渠道并各自定义方法,就可以同时向多个渠道发送同一条通知。
按需通知(On-demand notifications)
要向没有账号的人发送通知,可以使用Notification::route()。