Laravel: Tìm hiểu về Notifications (Phần 1)
https://viblo.asia/p/laravel-tim-hieu-ve-notifications-phan-1-Az45bbMV5xY
Laravel: Tìm hiểu về Notifications (Phần 1)
Introduction
Ngoài việc hỗ trợ sending email, Laravel còn cung cấp gửi thông báo qua nhiều kênh, gồm mail, SMS (qua Nexmo), và Slack. Thông báo có thể được lưu trong cơ sở dữ liệu và nó có thể hiển thị trên webiste.
Thông thường, thông báo nên ngắn gọn, thông tin thông báo là để báo cho người dùng những gì xảy ra trong ứng dụng của bạn. Ví dụ, nếu bạn viết một ứng dụng thanh toán, bạn phải gửi một thông báo "Hóa đơn thanh toán" đến người dùng qua kênh email và SMS.
Creating Notifications
Trong Laravel, mỗi một thông báo là một đại diện của một lớp (thường lưu trong thư mục app/Notifications
). Đừng lo lắng nếu bạn không tìm thấy thư mục này trong ứng dụng của bạn, nó sẽ được tạo ra khi bạn chạy lệnh Artisan make:notification
:
Lệnh này sẽ thêm một class trong thư mục app/Notifications
. Mỗi class notification chưa một phương thức via
và một biến số thông báo của phương thức (như là toMail
hoặc toDatabase
) chuyển thông báo thành nội dung tối ưu nó cho các channel.
Sending Notifications
Using The Notifiable Trait
Notification có thể được gửi thông qua 2 cách: sử dụng phương thức notify
của Notifiable
trait hoặc sử dụng Notification
facade. Đầu tiên, hãy xem cách sử dụng trait:
Trait này được sử dụng mặc định bởi App\User
model và chứa một phương pháp có thể được sử dụng để gửi thông báo: notify
. Phương thức notify
dự kiến sẽ nhận được một instance notification:
Using The Notification Facade
Ngoài ra, bạn có thể gửi thông báo qua Notification
facade. Nó sẽ hữu ích khi bạn cần gửi một thông báo đến nhiềunotifiable entities như một collection của người dùng. Để gửi thông báo sử dụng facade, truyền tất cả các notifiable entities và thông báo vào phương thức send
:
Specifying Delivery Channels
Mọi class notification có một phương thức via
để xác định kênh thông báo sẽ được chuyển đi. Thông báo có thể được gửi qua các kênh mail
, database
, broadcast
, nexmo
, và slack
. Phương thức via
nhận một $notifiable
instance, là thể hiện của class đang được gửi đi. Bạn có thể dùng $notifiable
để xác định kênh thông báo được phục vụ:
Queueing Notifications
Gửi thông báo có thể mất thời gian, đặc biệt nếu kênh cần một API ngoài để gọi phục vụ thông báo. Để tăng tốc ứng dụng của bạn, hãy đặt nó vào queue bằng cách thêm ShouldQueue
interface và Queueable
trait đến class của bạn. Interface và trait được thêm vào tất cả các thông báo được tạo ra sử dụng lệnh make:notification
, vì vậy bạn có thể trực tiếp thêm chúng vào trong class notification:
Mỗi ShouldQueue
interface được thêm vào thông báo của bạn, bạn có thể gửi thông báo như bình thương. Laravel sẽ detect ShouldQueue
interface trong class và tự động queue để chuyển thông báo:
Nếu bạn muốn hoãn thông báo, bạn có thể chain phương thức delay
vào trong instantiation notification của bạn:
On-Demand Notifications
Đội khi, bạn có thể cần phải gửi thông báo cho người không phải là người sử dụng ứng dụng của bạn. Sử dụng phương thức Notification::route
, bạn có thể chỉ định thông tin định tuyến thông báo ad-hoc trước khi gửi thông báo:
Mail Notifications
Formatting Mail Messages
Nếu một thông báo được gửi bằng email, bạn nên định nghĩa một phương thức toMail
trong class notification. Phương thức này sẽ nhận một $notifiable
entity và nên trả về một Illuminate\Notifications\Messages\MailMessage
instance. Nội dung mail có thể chứa nhiều dòng text như "call to action". Hãy xem một ví dụ về phương thức ``toMail``` như bên dưới:
Other Notification Formatting Options
Thay vì xác định "lines"của văn bản trong class notification, bạn có thể sử dụng phương thức view
để chỉ định một mẫu tùy chỉnh cần được sử dụng để hiển thị email thông báo:
Ngoài ra, bạn có thể trả về một mailable object từ phương thức toMail
:
Error Messages Một số thông báo thông báo cho người dùng về các lỗi, chẳng hạn như thanh toán hóa đơn không thành công. Bạn có thể chỉ ra rằng một thông báo mail là liên quan đến một lỗi bằng cách gọi cho các phương thức error
khi xây dựng tin nhắn của bạn. Khi sử dụng phương thức ```error`` trên email message, nút gọi hành động sẽ là màu đỏ thay vì màu xanh lam:
Customizing The Recipient
Khi gửi thông báo qua kênh mail
, thông báo hệ thống sẽ tự động tìm thuộc tính email
trong notifiable entity. Bạn có thể tùy biến email được sử dụng để gửi thông báo bằng cách định nghĩa một phương thức routeNotificationForMail
trên entity:
Customizing The Subject
Mặc định, subject của mail trong tên class của thông báo có dạng "title case". Vì vậy, nếu tên class notification của bạn là InvoicePaid
, subject của mail sẽ là Invoice Paid
. Nếu bạn muốn thay đổi, bạn có thể gọi phương thức subject
khi xây dựng nội dung:
Customizing The Templates
Bạn có thể chỉnh sửa HTML và plain-text template được sử dụng bởi mail thông báo bằng cách publishing gói thông báo resources. Sau khi chạy lệnh này, templates mail thông báo sẽ nằm tại resources/views/vendor/notifications
:
Markdown Mail Notifications
Markdown mail notification cho phép bạn tận dụng lwoij thế của các mẫu được tạo sẵn của thông báo qua mail. đồng thời cho phép bạn tự do viết thư dài hơn, tùy chỉnh. Khi message được viết trong Markdown, Laravel có thể render dẹp hơn, reponsive HTML template cho các message trong khi cũng tự động generate một plain-text.
Generating The Message
Để tạo một thông báo với mẫu Markdown tương ứng, bạn có thể sử dụng option --markdown
của câu lệnh Artisan make:notification
:
Giống như tất cả các mail notification, các thông báo sử dụng Markdown template nên định nghĩa một phương thức toMail
trên class notification. Tuy nhiên, thay vì sử dụng phương thức line
và action
để constrcut notification, sử dụng phương thức markdown
để chỉ định tên của Markdown template được sử dụng
Writing The Message
Markdown mail notification sử dụng kết hợp các thành phần của Blade component và Markdown systax cho phép bạn dễ dàng xây dựng các thông báo trong khi tận dụng được các thành phần pre-crafted notification components của Laravel.
Button Component Button component render một centered button link. Các component nhận 2 đối số, một url
và ` option color
. Các màu được hỗ trợ là blue
, green
và red
. Bạn có thể thêm nhiều button component đến một notification như bạn muốn:
Panel Component
Table component cho phép bạn chuyển đổi một Markdown table thành một HTML table. Các component chấp nhận Markdown table làm nội dung của nó. Căn lề table được hỗ trợ bằng cách sử dụng cú pháp căn chỉnh Markdown table mặc định:
Customizing The Components
Bạn có thể export tất cả các Markdown notification component vào ứng dụng của bạn để tùy chỉnh. Để export các component, sử dụng câu lệnh Artisan vendor:publish
để publish laravel-mail
aset tag:
Lệnh này sẽ publish các Markdown mail component tới thư mục resources/views/vendor/mail
. Thư mục mail
sẽ chứa một html
và một thư mục markdown
, mỗi tệp chứa các biểu diễn tương ứng của mỗi component có sẵn. Bạn được tự do tùy biến các component này theo ý mình.
Last updated