Laravel 訊息通知

wubuze發表於2020-11-27

除了支援 傳送郵件之外,Laravel 還支援通過多種頻道傳送通知,包括郵件、簡訊 (通過 Nexmo),以及 Slack。通知還能儲存到資料庫以便後續在 Web 頁面中顯示。

  • 下面只記錄了常用的郵件通知和database 儲存.

1. 儲存到資料庫

  • 建立一個通知類
php artisan make:notification TestNotify

這條命令會在 app/Notifications 目錄下生成一個新的通知類。這個類包含 via 方法以及一個或多個訊息構建的方法 (比如 toMail 或者 toDatabase) ,它們會針對指定的渠道把通知轉換為對應的訊息

  • TestNotify類內容如下

    <?php
    namespace App\TestNotify;
    use Illuminate\Bus\Queueable;
    use Illuminate\Notifications\Notification;
    use Illuminate\Contracts\Queue\ShouldQueue;
    use Illuminate\Notifications\Messages\MailMessage;
    class TestNotify extends Notification implements ShouldQueue
    {
      use Queueable;
      public function __construct()
      {
      }
    
     //對應傳送的通道
      public function via($notifiable)
      {
          return $notifiable->db ? ['database'] : ['mail'];
      }
    
      public function toMail($notifiable)
      {
    
      }
    
      //儲存資料到表,data欄位,json格式儲存
      public function toArray($notifiable)
      {
          return [
              "name" => "test",
              "age" => "test",
              "id" => $notifiable->id, //$notifiable 例項實際上就是User
          ];
      }
    }
  • 建立通知表 notifications

    php artisan notifications:table || php artisan migrate
  • 控制器中發起通知, 下面只介紹使用 Notification Facade 方式

    $user =User::find(1);
    $user->db = true; //指定儲存到資料表
    \Notification::send($user, new TestNotify());
  • 因為TestNotify,開啟了佇列,最後在執行佇列命令,檢視資料表驗證是否成功。

Laravel 訊息通知

  1. 郵件通知
  • 修改TestNotify 類的toMail 方法
    public function toMail($notifiable)
      {
         return (new MailMessage)
           ->subject("laravel通知")
           ->line('你好,這是一條測試通知')
           ->action('請檢視', url('/'))
           ->line('打擾了'.$notifiable->id);
      }
  • 同上呼叫通知類

    $user =User::find(2);
    \Notification::send($user, new TestNotify());
  • 如果有必要指定請指定郵箱欄位

    class User extends Model
    {
      public function routeNotificationForMail() {
          return $this->email;// 指定郵件接收者
      }
    }
  • 檢視郵件,搞定!

Laravel 訊息通知

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章