Thông Báo Đa Kênh Trong Laravel

· 3 min read

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.

Bình luận