Có gì mới trong Notification Laravel 5.3
Bài đăng này đã không được cập nhật trong 3 năm
Trong ứng dụng chức năng notification rất quan trọng, đôi khi không phải lúc nào chúng ta cũng theo dõi ứng dụng thường xuyên. Thật may mắn trong laravel 5.3 đã hỗ trợ đầy đủ để chúng ta có thể làm được chức năng này một cách đơn giản nhất. Ở bài viết này mình sẽ hướng dẫn làm notification tới kênh Slack. Tại sao lại là Slack vì slack có chat group, có app mobile và đơn giản là mình thích *_^
1. Hình dung trước khi làm
Khi có 1 sự kiện nào đó diễn ra cần thông báo, Chúng ta sẽ tạo ra 1 thông điệp cần thông báo và gửi thông điệp đó tới các kênh cần thông báo. Ở đây là Slack, vậy rõ ràng mình phải đưa thông điệp đó tới service của slack. Thật may slack quá mạnh nó chỉ yêu cầu gửi thông điệp đó tới Webhook của slack
là đủ. Cuối cùng là trên điện thoại hoặc máy tính Slack sẽ buzz 1 cái để các bạn biết. Vậy là xong, tiện lợi hơn email khá nhiều, khỏi rưởm rà checkmail rồi dọn rác
2. Kế hoạch có rồi bắt tay vào chiến thôi
Đọc qua cái docs đã uhm..ờ.. Không hiểu lắm nhưng hình như là thế này...
Tạo 1 thông báo đầu tiên
php artisan make:notification MyNotification
Notification created successfully.
Ngon rồi xem lại cấu trúc có file nào mới ko nào app/Notifications/MyNotification.php
Nội dung default nó na ná như sau
<?php
namespace App\Notifications;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
class MyNotification extends Notification
{
use Queueable;
/**
* Create a new notification instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
return ['mail'];
}
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
return (new MailMessage)
->line('The introduction to the notification.')
->action('Notification Action', 'https://laravel.com')
->line('Thank you for using our application!');
}
/**
* Get the array representation of the notification.
*
* @param mixed $notifiable
* @return array
*/
public function toArray($notifiable)
{
return [
//
];
}
}
Tiếp nào, Yêu cầu phải có package composer require guzzlehttp/guzzle
Cài nuôn.
Bây giờ phải thông báo đến ai đây. Slack có chat group hay gửi vào đấy nuôn. Ồ không nên không may notification cần private thì sao. Vậy là mỗi đối tượng cần thông báo phải khai báo 1 Webhook url riêng rồi. Đọc tiếp docs nào
Open Model User.php lên nào app/User.php
<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use Notifiable;
/**
* Route notifications for the Slack channel.
*
* @return string
*/
public function routeNotificationForSlack()
{
return $this->slack_webhook_url;
}
}
Hình như có 1 file trait Notifiable
và method routeNotificationForSlack
mới thì phải. còn $this->slack_webhook_url;
Có lẽ phải thêm trường slack_webhook_url
vào Table User trong database rồi.
Tạo WebhookURL
Đầu tiên phải đăng nhập Slack đã sau đó truy cập tới link (https://{yourteam}.slack.com/apps).
và tìm tới app "Incoming Webhook"
Tạo mới 1 webhook url thôi
https://hooks.slack.com/services/T0CEXX25P/B2VXXXRKL1/x6xxxxxxxxxxxxxx
Vậy là mỗi user muốn thông báo notification phải lưu webhook url riêng vào trường slack_webhook_url
rồi.
Tiếp nào quay lại class app/Notifications/MyNotification.php
/**
* Get the Slack representation of the notification.
*
* @param mixed $notifiable
* @return SlackMessage
*/
public function toSlack($notifiable)
{
return (new SlackMessage)
->content('Co mot thong bao moi danh cho ban');
}
new SlackMessage
Cái này ở đâu ra đây ...! rõ ràng lại phải kéo tiếp thư viện Illuminate\Notifications\Messages\SlackMessage
vào trong MyNotification
rồi. Triển nuôn.!
Làm sao để nó call được method toSlack
public function via($notifiable)
{
return ['mail', 'slack'];
}
Tuyệt vời, gửi 1 lúc nhiều kênh luôn, như mail, database, broadcast, SMS. Nó đã call sẵn cho chúng ta kênh thông báo qua mail rồi các bạn có thể bỏ đi nếu thích
Nội dung thông điệp có thể truyền vào từ nơi khác thông qua biến toàn cục mình hay sử dụng trong class app/Notifications/MyNotification.php
protected $message;
public function __construct($message)
{
$this->message = $message;
}
Xong rồi vậy là đã khai báo xong service notification đến slack. Giờ làm sao mà dùng nó đây nhỉ. docs
Giả sử mình cần thông báo đến nhiều người mình sẽ phải lấy ra danh sách những người cần nhận được thông báo $users = app(\App\User::class)->all();
Notification::send($users, new MyNotification($message));
Đừng quên kéo thư viện use Illuminate\Support\Facades\Notification;
và app/Notifications/MyNotification.php
tại nơi các bạn muốn sử dụng thông báo nhé.
Chúc các bạn thành công..!
All rights reserved