Thông Báo Đa Kênh Trong Laravel
Các ứng dụng hiện đại cần tiếp cận người dùng ở mọi nơi: email, SMS, Slack, hoặc thông báo trong ứng dụng. Hệ thống Notification của Laravel xử lý việc trừu tượng hóa này một cách tinh tế.
Tạo Notification
Tạo một class notification:
php artisan make:notification InvoicePaid
Cấu Trúc
Class chứa phương thức via() xác định cách gửi, và các phương thức cho nội dung gửi (ví dụ: toMail, toSlack).
public function via($notifiable)
{
// Gửi qua email và lưu vào database để hiển thị trong ứng dụng
return ['mail', 'database'];
}
Kênh Email
public function toMail($notifiable)
{
return (new MailMessage)
->line('The introduction to the notification.')
->action('View Invoice', url('/invoices/'.$this->invoice->id))
->line('Thank you for using our application!');
}
Kênh Database (Trong Ứng Dụng)
Đầu tiên, tạo bảng:
php artisan notifications:table
php artisan migrate
Sau đó định nghĩa định dạng dữ liệu:
public function toArray($notifiable)
{
return [
'invoice_id' => $this->invoice->id,
'amount' => $this->invoice->amount,
'message' => 'Your invoice was paid successfully.'
];
}
Gửi Thông Báo
Bạn có thể gửi cho một user hoặc bất kỳ entity "notifiable" nào.
$user->notify(new InvoicePaid($invoice));
Hoặc sử dụng Facade để gửi hàng loạt:
Notification::send($users, new InvoicePaid($invoice));
Slack & SMS
Laravel hỗ trợ nhiều driver thông qua các dịch vụ first-party (như Vonage/Twilio cho SMS) hoặc dự án cộng đồng Laravel Notification Channels, hỗ trợ:
- Slack
- Telegram
- Discord
- Microsoft Teams
- Push Notifications (FCM, APN)
Ví dụ (Slack):
public function toSlack($notifiable)
{
return (new SlackMessage)
->content('One of your invoices has been paid!');
}
Thông Báo Theo Yêu Cầu (On-Demand)
Bạn có thể gửi thông báo cho người không phải là user trong database (ví dụ: email khách):
Notification::route('mail', 'guest@example.com')
->notify(new InvoicePaid($invoice));
Laravel Notifications giữ cho logic giao tiếp của bạn sạch sẽ và tập trung, bất kể phương thức vận chuyển nào.