12/08/2018, 14:37

Tìm hiểu về notification trong Laravel 5.3(P2)

Ở bài viết trước tôi có giới thiệu qua một chút về notification . Ở bài viết này tôi xin đi chi tiết hơn về gửi notification trong Slack , SMS ..... Bước 1 : Đầu tiên chúng ta sẽ tạo ra một notification bằng cách sử dụng câu lệnh trong terminal: php artisan make : notification ...

Ở bài viết trước tôi có giới thiệu qua một chút về notification . Ở bài viết này tôi xin đi chi tiết hơn về gửi notification trong Slack , SMS .....

  • Bước 1 : Đầu tiên chúng ta sẽ tạo ra một notification bằng cách sử dụng câu lệnh trong terminal:
  php artisan make:notification InvoicePaid
  • Bước 2 : Sau đó chúng ta vào class InvoicePaid.php vừa được tạo trong thư mục Notifications . Nó sẽ được làm giống như dưới đây :
<?php

namespace AppNotifications;

use IlluminateBusQueueable;
use IlluminateNotificationsNotification;
use IlluminateContractsQueueShouldQueue;
use IlluminateNotificationsMessagesMailMessage;
use AppNotificationsInvoicePaid;
use IlluminateNotificationsMessagesSlackMessage;

class InvoicePaid extends Notification
{
    protected $user;
    use Queueable;

    /**
     * Create a new notification instance.
     *
     * @return void
     */
    public function __construct(AppUser $user)
    {
        $this->user = $user;
    }

    /**
     * Get the notification's delivery channels.
     *
     * @param  mixed  $notifiable
     * @return array
     */
    public function via($notifiable)
    {
        return ['slack'];
    }

    public function toSlack($notifiable)
    {
        return (new SlackMessage)
            ->success()
            ->content('today i feel lose something in my life');
    }
}

Sau đó ở model User.php , chúng ta sẽ thêm vào ý một function như sau :

public function routeNotificationForSlack()
    {
        return 'https://hooks.slack.com/services/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';
    }

Trong route chúng ta sẽ chỉnh sửa lại một chút :

Route::get('/home', function(){
    $user = AppUser::find(1);
    $user->notify(new InvoicePaid($user));
  });

Đương nhiên chúng ta nên cài đặt thêm guzzle trong file composer

"guzzlehttp/guzzle": "~4.0"

Cuối cùng , chúng ta sẽ có được kết quả như hình dưới đây :

Ở ví dụ này tôi sẽ sử dụng mailtrap.io . Chúng ta sẽ vào trang này login sau đó tạo cho mình một inbox mới .

Sau đó nhìn trên hình chúng ta sẽ copy UsernamePassword config vào file .env

MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME="7a8e62475af533"
MAIL_PASSWORD="830515dde5e323"
MAIL_ENCRYPTION=null

Ngoài ra , khi chúng ta tạo một notification bằng lênh make:notification chúng ta đã có sắn các function cần thiết .

<?php

namespace AppNotifications;

use IlluminateBusQueueable;
use IlluminateNotificationsNotification;
use IlluminateContractsQueueShouldQueue;
use IlluminateNotificationsMessagesMailMessage;
use AppUser;

class MailNoti extends Notification
{
    protected $user;
    use Queueable;

    /**
     * Create a new notification instance.
     *
     * @return void
     */
    public function __construct(User $user)
    {
        $this->user = $user;
    }

    /**
     * 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 IlluminateNotificationsMessagesMailMessage
     */
    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 [
            //
        ];
    }
}

Ta chỉ cần thêm route trong file web.php:

Route::get('/home', function(){
    $user = AppUser::find(1);
    $user->notify(new MailNoti($user));
});

Và kết quả chúng ta đã nhận được 1 notification trong mailtrap.io :

Hi vọng bài viết này có thể giúp đỡ được các bạn . Thank you !             </div>
            
            <div class=

0