Notificationとは
Laravelの通知(Notification)システムは、メール・SMS・Slack・データベースなど複数の配信チャンネルに対して、統一されたAPIで通知を送る仕組みです。 MailとNotificationの違い
請求書の支払い完了通知のように、複数のチャンネルに同じ通知を送りたい場合はNotificationが適しています。
Notificationクラスの作成
make:notification Artisanコマンドでクラスを生成します。
app/Notifications/ ディレクトリに配置されます。クラスには via() メソッドと、各チャンネル向けのメッセージ生成メソッドが含まれます。
通知の送信方法
Notifiableトレイトを使う
App\Models\User にはデフォルトで Notifiable トレイトが含まれています。notify() メソッドで通知を送ります。
Notifiable トレイトは User モデルに限らず、任意のモデルに追加できます。Notificationファサードを使う
複数のユーザーに同時に送信するにはNotification ファサードを使います。
sendNow() を使います。
配信チャンネルの指定
via() メソッドで使用するチャンネルを配列で返します。
メールチャンネルでの通知
toMail() メソッドで MailMessage インスタンスを返します。
MailMessage の主なメソッドは次のとおりです。
エラーを通知する場合は
error() メソッドを追加すると、ボタンが赤くなります。
Markdown通知メール
Markdown形式のリッチなメールを使うこともできます。--markdown オプションでクラスを生成します。
toMail() の代わりに toMarkdownMail() を使います。
データベースチャンネルでの通知
データベースチャンネルを使うと、通知をDBに保存してアプリのUI上で表示できます。テーブルの準備
まずnotifications テーブルを作成します。
toArrayメソッドの定義
toArray() メソッドで保存するデータを配列で返します。
notifications テーブルの data カラムにJSON形式で保存されます。
通知の取得
Notifiable トレイトが提供する notifications リレーションで通知を取得できます。
unreadNotifications を使います。
既読にする
markAsRead() で通知を既読にします。
通知のキュー処理
通知の送信に時間がかかる場合は、ShouldQueue インターフェースと Queueable トレイトを追加してキュー処理にします。make:notification で生成したクラスには最初からインポートされています。
ShouldQueue を実装すると、notify() を呼び出すだけで自動的にキューに入ります。
複数チャンネルへの同時送信
via() メソッドで複数のチャンネルを返し、それぞれのメソッドを定義するだけで、同じ通知を複数チャンネルに同時送信できます。
オンデマンド通知
アプリにアカウントを持たないユーザーにも通知を送りたい場合は、Notification::route() を使います。