通知中心
2026/10/26大约 1 分钟
通知中心
多渠道通知:模板、收件箱、发送记录、接收偏好、短信服务商。控制器在 app/controller/notify/,服务在 app/service/NotifyService.php。
通道
内置通道 email、sms、inbox;push(实时推送)由 PushService::registerAsChannel() 注册为通知通道(skip_preference=true)。通道通过 NotifyService::register($type, $sender, $configResolver, $skipPreference, $owner) 扩展,发送回调须返回 ['success'=>bool,'message'=>string,'data'=>mixed]。插件接入自定义通道见短信与通知扩展。
模板 /notify/template
标准 CRUD + changeStatus,另有:
| 方法 | 作用 |
|---|---|
preview | 用样例变量预览渲染结果 |
test | 试发一条验证通道联通 |
extractVariables | 从模板正文解析占位变量 |
模板按 code 唯一,发送时 send($templateCode, $type, $receiver, $variables, $extra) 渲染出 title/content。
收件箱 / 记录 / 偏好
| 控制器 | 前缀 | 要点 |
|---|---|---|
NotifyInboxController | /notify/inbox | index/read、markRead/markAllRead、delete/batchDelete、unreadCount(登录返回值里就带未读数) |
NotifyLogController | /notify/log | 发送流水,排查送达 |
NotifyPreferenceController | /notify/preference | index/save/batchSave,用户按通道设置是否接收 |
短信服务商 /notify/sms-provider
标准 CRUD + changeStatus,另有 setDefault(默认服务商)、test(发送测试)、all(下拉)。凭证走配置管理体系,底层 overtrue/easy-sms。
异步发送
发送可投递到 redis 队列 send_notify(dispatch/dispatchOne,消费者 SendNotifyJob),发送完成广播事件 notify.sent。队列消费者写 Redis 锁时须用 illuminate/redis 的位置参数(set($k,$v,'EX',$ttl,'NX')),见缓存规范提示。
