Laravel: Tìm hiểu về Notifications (Phần 2)
https://viblo.asia/p/laravel-tim-hieu-ve-notifications-phan-2-Az45bb3o5xY
Laravel: Tìm hiểu về Notifications (Phần 2)
Database Notifications
Prerequisites
Kênh database
notification lưu thông tin thông báo vào một bảng cơ sở dữ liệu. Bảng này sẽ chứa thông tin như là kiểu thông báo cũng như kiểu dữ liệu JSON để mô tả thông tin của thông báo.
Bạn có thể query vào bảng để hiển thị thông báo trong giao diện người dùng trong ứng dụng của bạn. Nhưng trước khi bạn làm điều này, bạn cần tạo một bảng để lưu thông báo của bạn. Bạn dùng lệnh notifications:table
để tao file migrate chứa các thuộc tính của bảng:
Formatting Database Notifications
Nếu một thông báo hỗ trợ được lưu trong cơ sở dữ liệu, bạn nên định nghĩa một phương thức toDatabase
hoặc toArray
trong class notification. Phương thức này sẽ nhận về một entity $notifiable
và nên trả về một plain PHP array. Mảng trả về này sẽ được encode JSON và lưu tại column data
của bảng notifications
. Hãy xem ví dụ về phương thức toArray
:
toDatabase
Vs. toArray
Phương thức toArray
cũng được sử dụng bởi kênh broadcast
để xác định dữ liệu vào broadcast đến JavaScript client. Nếu bạn muốn có hai mảng representations khác nhau cho kênh database
và broadcast
, bạn nên định nghĩa một phương thức toDatabase
thay thế phương thức toArray
.
Accessing The Notifications
Mỗi thông báo đã được lưu vào database, bạn cần một cách thuận tiện để truy cập chúng từ các thực thể thông báo của bạn. Illuminate\Notifications\Notifiable
trait được mặc định thêm vào bởi Laravel trong model App\User
, bao gồm một notifications
Eloquent relationship nó sẽ trả về thông báo cho entiry (thực thể). Để lấy thông báo, bạn có thể truy cập phương thức này như bất kỳ Eloquent relationship. Mặc định, thông báo sẽ được sắp xếp theo created_at
timestamp:
Nếu bạn chỉ muốn nhận những thông báo "unread", bạn có thể sử dụng unreadNotifications
relationship. Một lần nữa, những thông báo đó sẽ được sắp xếp theo created_at
timestamp:
Marking Notifications As Read
Thông thường, bạn sẽ muốn đánh dấu thông báo "read" khi nghười dùng xem nó. Illuminate\Notifications\Notifiable
trait cung cấp một phương thức markAsRead
, nó sẽ cập nhật column read_at
trong record của notification database:
Tuy nhiên, thay vì dùng vòng lặp qua mỗi thông báo, bạn có thể sử dụng phương thức markAsRead
trực tiếp trong một collection của thông báo:
Ngoài ra bạn cũng có thể sử dụng cập nhật hàng loạt để đánh dấu tất cả các thông báo đã đọc mà không cần lấy ra chúng từ database:
Dĩ nhiên, bạn cũng có thể delete
các thông báo từ table entirely:
Broadcast Notifications
Prerequisites
Trước khi broadcasting thông báo, bạn nên cấu hình giống với event broadcasting services. Event broadcasting cung cấp một cách để tiếp cận vào server-side bắn ra Laravel từ JavaScript client.
Formatting Broadcast Notifications
Kênh broadcast
thông báo broadcasts sử dụng event broadcasting services, cho phép JavaScript client để bắt thông báo realtime. Nếu một thông báo hỗ trợ broadcasting, bạn nên định nghĩa một phương thức toBroadcast
trong class notification. Phương thức này sẽ nhận một entiry $notifiable
và nên trả về một BroadcastMessage
instance. Dữ liệu trả về sẽ được encoded thành JSON và broadcast vào JavaScript client của bạn. Hãy xem ví dụ phương thức BroadcastMessage
:
Broadcast Queue Configuration Tất cả các broadcast thông báo được xếp hàng đợi để phát sóng. Nếu bạn muốn cấu hình queue connection hoặc queue name được sử dụng cho hàng đợi broadcast operation, bạn có thể sử dụng phương thức onConnection
và onQueue
của BroadcastMessage
:
Listening For Notifications
Thông báo sẽ được broadcast trong private chanel được định dạng sử dụng một {notifiable}.{id}
convention. Vì vậy, nếu bạn gửi thông báo vào một App\User
instance với id là 1
, notification sẽ broadcast trong App.User.1
private chanel. Khi sử dụng Laravel Echo, bạn có thể dễ dàng lắng nghe một thông báo trên kênh sử dụng phương thức helper notification
:
Customizing The Notification Channel Nếu bạn muốn tuỳ chỉnh các chanel thông báo entity nhận được broadcast notifications on, bạn có thể định nghĩa phương thức receiveBroadcastNotificationsOn
trên notifiable entity:
SMS Notifications
Prerequisites
Gửi thông báo SMS trong Laravel được cung cấp bởi Nexmo. Để gửi được thông báo qua Nexmo, bạn cần cài đặt nexmo/client
Composer package và thêm một vài cấu hình tùy chọn vào trong file cấu hình ``config/services.php``` của bạn. Bạn có thể copy ví dụ cấu hình sau để bắt đầu:
Tùy chọn sms_from
là số điện thoại sẽ gửi SMS. Bạn nên tạo một số điện thoại trong Nexmo control panel.
Formatting SMS Notifications
Nếu một thông báo hỗ trợ gửi SMS, bạn nên định nghĩa một phương thức toNexmo
trong class notification. Nó sẽ nhận một entity $notifiable
và trả về một Illuminate\Notifications\Messages\NexmoMessage
instance:
Unicode Content Nếu tin nhắn SMS của bạn chứa ký tự unicode
, bạn nên gọi phương thức unicode
khi xây dựng NexmoMessage
instance:
Customizing The "From" Number
Nếu bạn muốn gửi thông báo từ một số điện thoại khác với số điện thoại từ file cấu hình config/services.php
, bạn có thể dùng phương thức from
trong NexmoMessage
instance:
Routing SMS Notifications
Khi gửi thông báo qua kênh nexmo
, thông báo hệ thống sẽ tự động tìm thuộc tính phone_number
trong notifiable entity. Nếu bạn muốn tùy biến số điện thoại được gửi đến, định nghĩa một phương thức routeNotificationForNexmo
trong entity:
Slack Notifications
Prerequisites
Trước khi bạn có thể gửi thông báo qua Slack, bạn cần cài thư viện Guzzle HTTP library qua Composer:
Bạn cũng sẽ cần cấu hình tích hợp "Incoming Webhook" cho Slack team. Integration này sẽ cung cấp cho bạn một URL mà bạn có thể sử dụng khi routing Slack notifications.
Formatting Slack Notifications
Nếu một thông báo hỗ trợ qua thông báo của Slack mesage, bạn nên định nghĩa một phương thức toSlack
trong class notification. Phương thức này sẽ nhận một entity $notifiable
và trả về một Illuminate\Notifications\Messages\SlackMessage
instance. Thông báo Slack có thể chứa nội dung text cũng như "đính kèm". Hãy xem ví dụ đơn giản của phương thức toSlack
:
Customizing The Sender & Recipient Bạn có thể sử dụng phương thức````fromvà
tođể tùy chỉnh người gửi và người nhận. Phương thức
fromchấp nhận username và emoji identifier, trong khi phương thức
to``` chấp nhận chanel hoặc username:
Bạn cũng có thể sử dụng một hình ảnh làm biểu tượng của mình thay vì một emoji:
Slack Attachments
Bạn cũng có thể "attachments" vào Slack. Attachments cung cấp nhiều định dạng phong phú hơn là simple text. Trong ví dụ này, chúng ta sẽ gửi một thông báo lỗi về exception xảy ra trong ứng dụng, gồm link để xem chi tiết về exception:
Markdown Attachment Content Nếu một số attachment fields của bạn có chứa Markdown, bạn có thể sử dụng phương thức markdown
để hướng dẫn Slack parse và display các trường đính kèm đã chọn dưới dạng văn bản được định dạng Markdown. Các giá trị được chấp nhận bởi phương thức này là: pretext
, text
, and / or fields
. Để biết thêm thông tin về định dạng tập tin đính kèm Slack, xem Slack API documentation:
Routing Slack Notifications
Để route Slack notifications đến vị trí thích hợp, định nghĩa một phương thức routeNotificationForSlack
trong notifiable entity. Phương thức này sẽ trả về một webhook URL nơi mà thông báo sẽ được phục vụ. Webhook URLs có thể được sinh bởi "Incoming Webhook" service vào Slack team:
Last updated