12/08/2018, 15:29

Hướng dẫn sử dụng notification trong Laravel

Nếu bạn muốn tạo một ứng dụng webstie với những ý tưởng hay để giải quyết những vấn đề trong cuộc sống thì ứng dụng của bạn phải có giao diện thật đẹp, thao tác đơn giác và tiện ích đối với người dù ng để ứng dụng của các bạn được nhiều người biết đến hơn. Nếu bạn đang xây dựng ứng dụng với ...

Nếu bạn muốn tạo một ứng dụng webstie với những ý tưởng hay để giải quyết những vấn đề trong cuộc sống thì ứng dụng của bạn phải có giao diện thật đẹp, thao tác đơn giác và tiện ích đối với người dù ng để ứng dụng của các bạn được nhiều người biết đến hơn. Nếu bạn đang xây dựng ứng dụng với framework laravel thì bạn yên tâm nhé vì từ Laravel version 5.3 trở về sau này đã có hỗ trợ thư viện notification. Thư viện này hỗ trợ cho các bạn làm những chức năng như thông báo hành động của người dùng, gởi thông báo khi người dùng đặt hàng online,….. Để làm được những chức năng này trước tiên bạn cần tìm hiểu hoạt động của Queues trong laravel tại đường link sau: https://laravel.com/docs/5.4/queues.

Ngoài việc hỗ trợ các kiểu thông báo như sending email thì Laravel 5.3 trở đi hỗ trợ những kiểu thông báo qua nhiều kênh phân phối khác nhau bao gồm SMSSlack để phù hợp hơn với những ý tưởng của các bạn. Giả dụ bạn đang xây dựng một chức năng là thông báo cho người dùng sau khi người thực hiện một thao tác quan trọng ở ứng dụng của bạn, khi có thông tin hay bài đăng mới bạn muốn thông báo cho người dùng bạn có thể sử dụng Email , SMS, Slack của Laravel để thông báo cho người dùng. Nào mình cùng thực hiện lần lượt qua những kiểu thông báo trên nhé 

Để sử dụng Notification trong Larravel thì bạn chạy command sau

php artisan make: notification NotificationUser

Câu lệnh này sẽ tạo một class mới trong thư mục app/Notification, mỗi notification class sẽ chứa một mehtod via($$otifiable) để xác định kiểu thông báo nào sẽ được chọn và bao gồm 2 method toMail, toDatabase.

     /**
     * Get the notification's delivery channels.
     *
     * @param  mixed  $notifiable
     * @return array
     */
    public function via($notifiable)
    {
        return $notifiable->prefers_sms ? ['nexmo'] : ['mail', 'database'];
    }

Notification sẽ được gởi bằng hai cách đó là sử dụng lớp Notifiable trait và Notification facade. Nếu sử dụng Notifiable trait thì

<?php

namespace App;

use IlluminateNotificationsNotifiable;
use IlluminateFoundationAuthUser as Authenticatable;

class User extends Authenticatable
{
    use Notifiable;
}
Note: Sử dung class Notifiable trait ở tất cả những đối tượng mà bạn muốn thực hiện notification
namespace AppHttpControllers;

use IlluminateHttpRequest;
use AppNotificationsNotificationUser;
use AppUser;

    class UserController extends Controller
    {
        /**
         * Display a listing of the resource.
         *
         * @return IlluminateHttpResponse
         */
        public function index()
        {
            $user = User::find(1);
            $user->notify(new NotificationUser());
        }
     }

Để sử dụng kiểu thông báo này bạn cần instance IlluminateNotificationsMessagesMailMessage vào class NotificationUser.php và sử dụng method toMail()

public function toMail($notifiable)
{
    return (new MailMessage)
                 ->greeting('Hello' . $this->user->name . '!')
                 ->line('You created a new member!')
}

Trong ví dụ trên , chúng ta đã tạo một lời chào, một đoạn messages ngắn. Những method đó được cung cấp bởi MailMessage nên việc thực hiện thật đơn giản và tiện lợi. Sau khi thực hiện chạy nó sẽ render ra một HTML.

Gởi thông báo bằng SMS được cung cấp bởi Nexmo, đầu tiên bạn cần install nexmo/client bằng composer và thêm vào file config/services.php với đoạn config như sau:

'nexmo' => [
    'key' => env('NEXMO_KEY'),
    'secret' => env('NEXMO_SECRET'),
    'sms_from' => '01648663562',
],

Với sms_from là số của ứng dụng bạn và bạn nên đăng ký ở Nexmo tại đường link sau https://www.nexmo.com/

Để sử dụng kiểu thông báo này bạn cần instance IlluminateNotificationsMessagesNexmoMessage vào class NotificationUser.php và sử dụng method toNexmo()

public function toNexmo($notifiable)
{
    return (new NexmoMessage)
        ->from(123456789)
        ->content('You ceated a User!');
}

Nếu bạn muốn sử dụng một số điện thoại chỉ định thay bạn nên tạo một routeNotificationForNexmo tại model User.php.

/**
     * Route notifications for the Nexmo channel.
     *
     * @return string
     */
    public function routeNotificationForNexmo()
    {
        return $this->phone;
    }

Trước khi sử dụng thông báo bằng Slack bạn phải cài đặt thư viện

composer require guzzlehttp/guzzle

Trước tiên bạn phải đăng ký một ứng dụng tại https://slack.com/ để tạo một channel để quản lý các notification thông qua Slack. Sau khi tạo một team mới bạn tạo vào đường link sau https://{yourusername}.slack.com/apps và tạo một app để quản lý notification cho website. Sau khi đăng khi đăng ký sẽ có một Url https://hooks.slack.com/services/......... và bạn thêm vào routeNotificationForSlack() tại class User.php. Ở đây mình đưa url vào file .env để quản lý.

/**
     * Route notifications for the Slack channel.
     *
     * @return string
    */
    public function routeNotificationForSlack()
    {
        return env('SLACK_WEBHOOK_URL');
    }

Để sử thông báo bằng Slack bạn cần instance use IlluminateNotificationsMessagesSlackMessage; vào class NotificationUser.php và sử dụng method toSlack()

/**
     * Get the Slack representation of the notification.
     *
     * @param  mixed  $notifiable
     * @return SlackMessage
     */
    public function toSlack($notifiable)
    {
        return  (new SlackMessage)
                ->content('You add a new member!');
    }

Bạn có thể format notification của mình đa dạng hơn như:

  • Để add images : - >image('{your_url_images}')
  • Để add url :
    ->attachment(function ($attachment) use () {
                    $attachment->title('Exception: File Not Found',  'your_url')
                });

Hy vọng qua bài này các bạn có thể hiểu và tạo nhiều chức năng cho website của mình hơn ^_^

0