Laravel 5.3 提供了一種全新的發送通知的方式:Notification 。我的理解是能夠基於某事件(操做)觸發一系列的通知任務,而通知方式由 Channel (通知渠道)接管,這樣使得通知(或推送)邏輯更抽象,更易於管理和重構。php
舉個例子,在用戶完成訂單支付後,你須要給用戶發送郵件、短信提醒用戶的訂單已完成支付,還須要提醒倉管有新訂單須要發貨,若是是重要的訂單可能還須要通知 Boss 剛剛有用戶支付了一筆大訂單,若是你的應用提供客戶端,你可能還須要給用戶的 iOS/Android/Mac/Windows 等 App 發送推送通知,固然也包括瀏覽器的通知。你可能還須要把這個通知實時廣播出去,讓用戶的網頁無刷新實時更新狀態等。除此以外,像訂單操做這麼重要的東西,你應該要記錄日誌。laravel
在 5.3 以前,我是利用 Laravel 的 Model Event, Broadcast Event, Event Listener, Job, Queue 來完成這一系列通知。我以前在 laravel-bearychat 這個擴展包的文檔中給了一個發送異步消息的示例。git
如今 5.3 的一個 Notification 就能夠囊括全部了,更重要的是代碼分離。當用戶完成訂單支付後,只須要經過在 controller 或 model 中手動調用或者監聽 Order model 的訂單狀態來自動調用 OrderPaidNotification
這個通知,剩下的事就都交給 OrderPaidNotification
了。github
Notification 的具體使用請參閱官方文檔:https://laravel.com/docs/mast...瀏覽器
Laravel 5.3 內置支持 Mail, Database, Broadcast, SMS, Slack 這幾種 Channel 。異步
由於有不少第三方的通知(或推送)服務,官方專門搞了個組織來維護民間的 channels ,好比 Twitter, Facebook, Telegram, Evernote, IFTTT, Apple APNs 等。async
Laravel Notification Channels 主頁:http://laravel-notification-c...ide
GitHub 組織:https://github.com/laravel-no...spa
若是你在使用國內的某服務,能夠考慮作成一個擴展包供大夥使用。設計
使用 laravel-notification-channels/backport
這個擴展包,在 Laravel 5.2 / 5.1 上也可使用 Laravel 5.3 的 Notification 。
項目主頁:https://github.com/laravel-no...
我週末作了一個 BearyChat 的通知渠道 BearyChatChannel,是在以前 Laravel-BearyChat 這個擴展包的基礎上開發的,能夠跟其兼容使用。
由於以前寫的 Message
類和 Laravel 5.3 Notification 的 message 的設計理念高度類似,因此在新包中能夠無縫遷移。其實我就是直接使用的舊的 Message 類,由於這樣能夠跟舊包兼容,並且這個 Message
除了發送通知還有響應 Outgoing 的功能。
正在使用 Laravel-BearyChat 的小夥伴在升級 Laravel 5.3 後可使用 Notification+BearyChatChannel 這種新方式發送機器人消息,也可使用原來的方式,互不影響。
BearyChatChannel 使用的配置文件仍是原來的 config/bearychat.php
,無需從新配置。
若是你註冊了 BearyChatChannel 的 ServiceProvider ,原來的 ElfSundae\BearyChat\Laravel\ServiceProvider
無關緊要。
BearyChatChannel 項目主頁及文檔:https://github.com/laravel-no...
歡迎 Star 歡迎 Issue