通知
- 通知を送信
- 通知可能な特性を使用する
- 通知ファサードを使用する
- 指定されたチャネルに送信する
- オンデマンド通知
- 電子メール通知
- フォーマットされた電子メールメッセージ
- #追加の通知書式設定オプション ##エラー メッセージ
- #カスタム受信者
- #テーブル コンポーネント
- #カスタム コンポーネント
- 自己定義 CSS
- #データベース通知
- ##予備知識
- データベース通知のフォーマット
- アクセス通知 #通知を既読としてマークする
- 予備知識
- #フォーマットされた SMS 通知
- #Unicode コンテンツ
- #Slack 通知 #予備知識
- Slack 通知の書式設定
- ##送信者と受信者のカスタマイズ
- #Slack 添付ファイル
- Markdown 添付ファイルのコンテンツ
- ローカライズされた通知
- 通知イベント
- カスタム チャネル
メッセージ通知
- 概要
- 通知を作成
- 通知を送信
- 通知可能な特性を使用する
- #通知ファサードを使用する ##送信チャネルを指定する
- #通知キューイング
- #オンデマンド通知
- #電子メール通知
#電子メール情報のフォーマット - ## メッセージの作成 データベース通知のフォーマット
- ブロードキャスト システムのフォーマット
- リッスン通知用フォーマットされた SMS 通知
- カスタマイズされた「差出人」電話番号 Slack 添付ファイル
- #Slack 通知ルーティング
- はじめに
- Laravel は、電子メールの送信のサポートに加えて、送信もサポートしています。電子メール、SMS (Nexmo 経由)、 Slack
- など、さまざまなチャネルを通じて通知を送信できます。通知をデータベースに保存して、後で Web ページに表示することもできます。
通常、通知は、アプリケーションで何が起こっているかをユーザーに通知するために使用される短い情報メッセージです。たとえば、オンライン トランザクション アプリケーションを作成している場合は、電子メールと SMS チャネル クラスを通じてユーザーに「請求書支払い」通知を送信する必要があります。
通知の作成
Laravel の通知はクラスです (通常は
app/Notifications
フォルダーに保存されます)。表示されなくても心配する必要はありません。make:notification
コマンドを実行して作成してください:php artisan make:notification InvoicePaid
このコマンドは、
app/ に新しいコマンドを生成します。通知
ディレクトリ通知クラス。このクラスには、via
メソッドと、通知を対応するニュースに変換する 1 つ以上のメッセージ構築メソッド (toMail
やtoDatabase
など) が含まれています。通知の送信
通知可能な特性の使用
通知は次のとおりです。渡された
Notifiable
トレイトのnotify
メソッドまたはNotification
ファサードの 2 つの方法で送信されます。まず、特性の使用について説明します。<?php namespace App; use Illuminate\Notifications\Notifiable; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable{ use Notifiable; }
デフォルトの
App\User
モデルは、通知の送信に使用できるメソッドnotify
を含むこの特性を使用します。notify
このメソッドにはパラメーターとして通知インスタンスが必要です:use App\Notifications\InvoicePaid; $user->notify(new InvoicePaid($invoice));
{tip}
Illuminate\Notifications\Notifiable
トレイトはどのモデルでも使用できることを覚えておいてください。User
モデルだけではありません。通知ファサードの使用
さらに、
Notification
ファサードを通じて通知を送信できます。これは主に、ユーザーのコレクションに通知を送信する場合など、通知を受信できる複数のエンティティに通知を送信する場合に使用されます。 Facade を使用して通知を送信する場合は、通知と通知を受信できるインスタンスをsend
メソッドに渡す必要があります:Notification::send($users, new InvoicePaid($invoice));
Send指定されたチャネル
各通知クラスには、通知が送信されるチャネルを決定する
via
メソッドがあります。すぐに使用できるチャネルは、mail
、database
、broadcast
、nexmo
、slack
です。{ヒント} Telegram や Pusher などの他のチャネルを使用したい場合は、コミュニティ主導の Laravel 通知チャネル Web サイトをチェックしてください。
via
メソッドは$notifiable
インスタンスを受け取ります。このインスタンスは、通知が実際に送信されるクラスのインスタンスになります。$notifiable
を使用して、通知の送信に使用するチャネルを決定できます:/** * 获取通知发送频道。 * * @param mixed $notifiable * @return array */ public function via($notifiable){ return $notifiable->prefers_sms ? ['nexmo'] : ['mail', 'database']; }
Notification Queue
# # {注:} 通知キューを使用する前に、キューを構成し、キュー タスクを開始する必要があります。
通知の送信には、特にチャネルで通知を送信するために追加の API 呼び出しが必要な場合、時間がかかることがあります。アプリケーションの応答時間を短縮するために、通知をキューにプッシュして非同期に送信できます。キューにプッシュ通知を実装するには、対応する通知クラスで
ShouldQueue
インターフェイスを実装し、Queueable
の特性。通知クラスがmake:notification
コマンドによって生成された場合、インターフェイスと特性はデフォルトでインポートされており、通知クラスにすぐに追加できます:<?php namespace App\Notifications; use Illuminate\Bus\Queueable; use Illuminate\Notifications\Notification; use Illuminate\Contracts\Queue\ShouldQueue; class InvoicePaid extends Notification implements ShouldQueue{ use Queueable; // ... }
ShouldQueue
インターフェースが通知クラスに追加された後、以前と同様に通常どおり通知を送信できます。Laravel は自動的にShouldQueue
インターフェースを検出し、通知をキューにプッシュします:$user->notify(new InvoicePaid($invoice));
通知の送信を遅らせたい場合は、通知インスタンスの後に
lay
メソッドを追加できます:$when = now()->addMinutes(10); $user->notify((new InvoicePaid($invoice))->delay($when);
オンデマンド通知
ユーザーに通知を送信する必要がある場合がありますが、そのユーザーがアプリケーションのユーザー システムに存在しません。これを実現するには、
Notification::route
メソッドを使用して、通知を送信する前の特別な通知ルート。 :Notification::route('mail', 'taylor@example.com') ->route('nexmo', '5555555555') ->notify(new InvoicePaid($invoice));
#電子メール通知通知が電子メールによる送信をサポートしている場合は、通知クラスで
toMailメソッドを定義する必要があります。このメソッドは、
{注:} # であることに注意してください。$notifiable
エンティティを受け取り、Illuminate\Notifications\Messages\MailMessage
インスタンスを返します。メール メッセージには、複数行のテキストとアクションの呼び出しを含めることができます。toMail
メソッドの例を見てみましょう:/** * 获取通知对应的邮件。 * * @param mixed $notifiable * @return \Illuminate\Notifications\Messages\MailMessage */ public function toMail($notifiable){ $url = url('/invoice/'.$this->invoice->id); return (new MailMessage) ->greeting('Hello!') ->line('One of your invoices has been paid!') ->action('View Invoice', $url) ->line('Thank you for using our application!'); }
##$this->invoice->id
オブジェクトによって提供されるこれらのメソッドにより、短いトランザクション電子メールの書式設定が迅速かつ簡単になります。は toMail
MailMessageメソッドで使用されます。メッセージを生成するために通知に必要なデータを通知のコンストラクターに渡すことができます。
この例では、挨拶、テキスト行、アクションの呼び出し、および別のテキスト行を登録します。
mail
チャネルは、メッセージ コンポーネントを、プレーン テキスト コピーを含む美しく応答性の高い HTML 電子メール テンプレートに変換します。
mailチャネルを通じて生成された電子メールの例を次に示します:
その他の通知書式設定オプション通知クラスで複数行のテキストを定義することに加えて、{注:} 電子メール通知を送信するときは、構成ファイル
config/app.php## に
nameが設定されていることを確認してください。 # 値。電子メール通知メッセージのヘッダーとトレーラーで使用されます。
view
メソッドを使用してカスタム 、通知メールをレンダリングするためのテンプレート:
/** * 获取通知邮件。 * * @param mixed $notifiable * @return \Illuminate\Notifications\Messages\MailMessage */ public function toMail($notifiable){ return (new MailMessage)->view( 'emails.name', ['invoice' => $this->invoice] ); }
さらに、toMail
メソッドからメール可能なオブジェクトを返すことができます:
use App\Mail\InvoicePaid as Mailable; /** * Get the mail representation of the notification. * * @param mixed $notifiable * @return Mailable */ public function toMail($notifiable){ return (new Mailable($this->invoice))->to($this->user->email); }
エラー メッセージ一部の通知では、注文の支払いの失敗などのエラー メッセージがユーザーに通知されます。メッセージを作成するときにerror
メソッドを呼び出して、電子メール メッセージがエラー情報を表すことを示すことができます。電子メール メッセージで
errorメソッドを使用すると、アクション ボタンが赤色に変わります:
/** * 获取通知邮件。 * * @param mixed $notifiable * @return \Illuminate\Notifications\Message */ public function toMail($notifiable){ return (new MailMessage) ->error() ->subject('Notification Subject') ->line('...'); }
Custom Recipientmail
チャネルを通じて通知を送信すると、通知システムは通知されたエンティティの
email属性を自動的に検索します。エンティティに
routeNotificationForMailを定義できます。通知の送信に使用する電子メール アドレスをカスタマイズするには:
<?php namespace App; use Illuminate\Notifications\Notifiable; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable{ use Notifiable; /** * 邮件通道通知的路由。 * * @param \Illuminate\Notifications\Notification $notification * @return string */ public function routeNotificationForMail($notification) { return $this->email_address; } }
件名のカスタマイズデフォルトでは、電子メールの件名は次のとおりです。 「タイトル スタイル 」通知クラス名の形式なので、通知クラスの名前がInvoicePaid
の場合、電子メールの件名は
Invoice Paidになります。明示的な件名を指定する場合は、メッセージについては、
subjectメソッドを呼び出すときにメッセージを作成できます:
/** * 获取通知的邮件表示。 * * @param mixed $notifiable * @return \Illuminate\Notifications\Messages\MailMessage */ public function toMail($notifiable){ return (new MailMessage) ->subject('Notification Subject') ->line('...'); }
カスタム テンプレート通知拡張パッケージのリソースを公開し、電子メール通知に使用される HTML およびプレーン テキストのテンプレートを変更します。次のコマンドを実行すると、電子メール通知テンプレートがresources/views/vendor/notifications
ディレクトリに保存されます:
php artisan vendor:publish --tag=laravel-notifications
Markdown電子メール通知Markdown 電子メール通知を使用すると、電子メール通知用の事前に構築されたテンプレートを利用できるため、より長く、よりパーソナライズされたメッセージを自由に作成できます。これらのメッセージは Markdown 形式で記述されているため、Laravel はプレーンテキストのコピーを自動的に生成しながら、メッセージを美しく応答性の高い HTML テンプレートにレンダリングすることもできます。 メッセージの生成対応する Markdown テンプレートを使用して通知を生成するには、Artisan コマンドmake:notification## を使用できます。
toMail#--markdown
オプションを使用します:
他の電子メール通知と同様、Markdown テンプレートを使用する通知クラスもphp artisan make:notification InvoicePaid --markdown=mail.invoice.paid
メソッドを定義する必要があります。ただし、コンストラクター通知の
line
メソッドとaction
メソッドの代わりにmarkdown
メソッドを使用して、使用する Markdown テンプレート名を指定できます:/** * 获取通知的邮件表示。 * * @param mixed $notifiable * @return \Illuminate\Notifications\Messages\MailMessage */ public function toMail($notifiable){ $url = url('/invoice/'.$this->invoice->id); return (new MailMessage) ->subject('Invoice Paid') ->markdown('mail.invoice.paid', ['url' => $url]); }
データベース通知のフォーマット
通知がデータベース テーブルへの保存をサポートしている場合、通知クラスは
toDatabase
またはtoArray
メソッドを定義する必要があります。このメソッドは、$notifiable
エンティティをパラメータとして受け取り、ネイティブ PHP 配列を返します。返されたデータは JSON としてエンコードされ、notifications
テーブルのdata
列に保存されます。toArray
メソッドの例を見てみましょう:/** * 获取通知的数组表示。 * * @param mixed $notifiable * @return array */ public function toArray($notifiable){ return [ 'invoice_id' => $this->invoice->id, 'amount' => $this->invoice->amount, ]; }
toDatabase
とtoArray
toArray
メソッドbroadcast
チャネルを使用して、どのデータを JavaScript クライアントにブロードキャストするかを決定することもできます。database
チャネルとbroadcast
チャネルに 2 つの異なる配列表現がある場合は、toArray
メソッドの代わりにtoDatabase
メソッドを定義する必要があります。 。通知へのアクセス
通知がデータベースに保存されたら、通知エンティティから通知にアクセスするための適切なメソッドが必要になります。 Lareval に含まれるデフォルトの
App\User
モデルにはIlluminate\Notifications\Notifiable
特性があり、そのnotifications
Eloquent 関連メソッドはエンティティ通知を返すことができます。通知を取得するには、他の Eloquent 関連のメソッドと同様に、このメソッドにアクセスできます。デフォルトでは、通知はcreated_at
タイムスタンプで並べ替えられます:$user = App\User::find(1); foreach ($user->notifications as $notification) { echo $notification->type; }
「未読」通知のみを取得するには、
unreadNotifications
関連付けメソッドを使用できます。ここでも、これらの通知はcreated_at
タイムスタンプで並べ替えられます:$user = App\User::find(1); foreach ($user->unreadNotifications as $notification) { echo $notification->type; }
{tip} JavaScript クライアントから通知にアクセスするには、通知を返すアプリケーションの通知コントローラーを定義する必要があります。現在のユーザーなどのエンティティに対する通知。 HTTP リクエストは、JavaScript クライアントからこのコントローラー URI に送信できます。
通知を既読としてマークする
通常、ユーザーが通知を読んだ後、通知を「既読」としてマークします。 。
Illuminate\Notifications\Notifiable
トレイトは、データベース内の通知レコードのread_at
列を更新するmarkAsRead
メソッドを提供します:$user = App\User::find(1); foreach ($user->unreadNotifications as $notification) { $notification->markAsRead(); }
通知コントロールで使用できます。 通知を循環的に呼び出す代わりに、コレクション上で
markAsRead
メソッドを直接使用します。$user->unreadNotifications->markAsRead();
また、フィンガー アップデートを使用して、すべての通知を読み込まずに既読としてマークすることもできます。データベース:
$user = App\User::find(1); $user->unreadNotifications()->update(['read_at' => now()]);
delete
メソッドを使用して、テーブルから通知全体を削除できます:$user->notifications()->delete();
ブロードキャスト通知
予備知識
#通知をブロードキャストする前に、Laravel のイベント ブロードキャスト サービスを設定し、よく理解しておく必要があります。イベントブロードキャストは、JavaScript クライアントがサーバーによってトリガーされた Laravel イベントに応答する方法を提供します。
フォーマットされたブロードキャスト通知
ブロードキャスト
チャネルは、Laravel のイベント ブロードキャスト サービスを使用してブロードキャスト通知を送信します。これにより、JavaScript クライアントはリアルタイムで通知をキャプチャできます。通知がブロードキャストをサポートしている場合は、通知クラスでtoBroadcast
メソッドを定義する必要があります。このメソッドは、$notifiable
エンティティをパラメーターとして受け取り、BroadcastMessage
インスタンスを返します。返されたデータは JSON としてエンコードされ、JavaScript クライアントにブロードキャストされます。toBroadcast
メソッドの例を見てみましょう。use Illuminate\Notifications\Messages\BroadcastMessage;/** * 获取通知的可广播表示。 * * @param mixed $notifiable * @return BroadcastMessage */ public function toBroadcast($notifiable){ return new BroadcastMessage([ 'invoice_id' => $this->invoice->id, 'amount' => $this->invoice->amount, ]); }
ブロードキャスト キューの構成
すべてのブロードキャスト通知はブロードキャスト キューに入れられます。ブロードキャスト操作のキュー接続またはキュー名を構成するには、
BroadcastMessage
のonConnection
メソッドとonQueue
メソッドを使用する必要があります:return (new BroadcastMessage($data)) ->onConnection('sqs') ->onQueue('broadcasts');
{tip} 指定されたデータに加えて、ブロードキャスト通知には、通知クラスのクラス名を含む
type
フィールドも含まれます。リスニング通知
通知は
{notifiable} としてフォーマットされます。{id}
フォームはブロードキャストされますプライベート チャネル上にあるため、ID1
のApp\User
インスタンスに通知を送信する場合、通知はプライベート チャネルApp.User 上に送信されます。 .1
をブロードキャストするには、Laravel Echo を使用する場合、ヘルパー関数notification
を使用してチャネル上の通知を簡単に監視できます:Echo.private('App.User.' + userId) .notification((notification) => { console.log(notification.type); });
カスタム通知チャネル
特定のチャネルでブロードキャスト通知を受信するように通知されたエンティティをカスタマイズする場合は、通知されたエンティティで
receivesBroadcastNotificationsOn
メソッドを定義できます:<?php namespace App; use Illuminate\Notifications\Notifiable; use Illuminate\Broadcasting\PrivateChannel; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable{ use Notifiable; /** * 用户接收广播通知的通道。 * * @return string */ public function receivesBroadcastNotificationsOn() { return 'users.'.$this->id; } }
テキストメッセージ(SMS)通知
予備知識
LaravelはNexmoに基づいてSMS通知を送信します。 Nexmo を使用して通知を送信する前に、対応する Composer 依存関係パッケージ
laravel/nexmo-notification-channel
:composer require laravel/nexmo-notification-channel
次のステップでは、構成ファイル
を構成する必要があります。 config/services.php
それに応じて設定します。次のサンプル構成を参照できます:'nexmo' => [ 'key' => env('NEXMO_KEY'), 'secret' => env('NEXMO_SECRET'), 'sms_from' => '15556666666', ],
sms_from
構成項目は、SMS メッセージの送信に使用する携帯電話番号です。アプリケーションの携帯電話番号を生成する必要があります。 Nexmo コントロール パネル。SMS 通知のフォーマット
通知が SMS による送信をサポートしている場合は、通知クラスで
toNexmo# を定義する必要があります。 ## 方法。このメソッドは、
$notifiableエンティティを受け取り、
Illuminate\Notifications\Messages\NexmoMessageインスタンスを返します:
/** * Get the Nexmo / SMS representation of the notification. * * @param mixed $notifiable * @return NexmoMessage */ public function toNexmo($notifiable){ return (new NexmoMessage) ->content('Your SMS message content'); }
Unicode コンテンツ SMS メッセージに次のものが含まれている場合Unicode 文字の場合、NexmoMessage
インスタンスを構築するときに
unicodeメソッドを呼び出す必要があります:
/** * Get the Nexmo / SMS representation of the notification. * * @param mixed $notifiable * @return NexmoMessage */ public function toNexmo($notifiable){ return (new NexmoMessage) ->content('Your unicode message') ->unicode(); }
#
この例では、単純なテキスト行を Slack に送信するだけで、作成される最終メッセージは次のとおりです:「送信」番号をカスタマイズする
設定ファイル
config/services.php
で指定された携帯電話番号とは異なる番号を通じて通知を送信したい場合は、次のように使用できます。NexmoMessage
インスタンスのメソッド:/** * Get the Nexmo / SMS representation of the notification. * * @param mixed $notifiable * @return NexmoMessage */ public function toNexmo($notifiable){ return (new NexmoMessage) ->content('Your SMS message content') ->from('15554443333'); }
SMS 通知ルーティング
Use
nexmo
チャネルが通知を送信すると、通知システムは通知されたエンティティのphone_number
属性を自動的に検索します。通知の送信先の携帯電話番号をカスタマイズする場合は、このエンティティでrouteNotificationForNexmo
メソッドを定義できます:<?php namespace App; use Illuminate\Notifications\Notifiable; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable{ use Notifiable; /** * Route notifications for the Nexmo channel. * * @param \Illuminate\Notifications\Notification $notification * @return string */ public function routeNotificationForNexmo($notification) { return $this->phone; } }
Slack通知
予備知識
Slack を通じて通知を送信する前に、Composer を通じて Slack 通知チャネルをインストールする必要があります:
composer require laravel/slack-notification-channel
さらに、Slack グループの "Incoming Webhook" 統合を構成する必要もあります。この統合により、Slack 通知ルーティングを行うときに URL が提供されます。
Slack 通知のフォーマット
通知が Slack メッセージ経由の送信をサポートしている場合は、通知クラスで
toSlack## を定義する必要があります。
#$notifiableエンティティを受け取り、テキスト コンテンツと書式設定された追加テキストまたは配列フィールドの「添付ファイル」を含む
Illuminate\Notifications\Messages\SlackMessageインスタンスを返すメソッド。基本的な
toSlackの使用例を見てみましょう:
/** * Get the Slack representation of the notification. * * @param mixed $notifiable * @return SlackMessage */ public function toSlack($notifiable){ return (new SlackMessage) ->content('One of your invoices has been paid!'); }
送信者と受信者のカスタマイズfrom
と
toを使用して送信者をカスタマイズできます。メソッドと受信側の
fromメソッドはユーザー名と絵文字 ID を受け取り、
toメソッドはチャンネルまたはユーザー名を受け取ります。
/** * Get the Slack representation of the notification. * * @param mixed $notifiable * @return SlackMessage */ public function toSlack($notifiable){ return (new SlackMessage) ->from('Ghost', ':ghost:') ->to('#other') ->content('This will be sent to #other'); }
画像を使用することもできます。絵文字を置き換えるロゴとして:/** * Get the Slack representation of the notification. * * @param mixed $notifiable * @return SlackMessage */ public function toSlack($notifiable){ return (new SlackMessage) ->from('Laravel') ->image('https://laravel.com/favicon.png') ->content('This will display the Laravel logo next to the message'); }
Slack 添付ファイルSlack メッセージに「添付ファイル」を追加することもできます。単純なテキスト メッセージと比較して、添付ファイルには豊富な形式の選択肢が用意されています。この例では、アプリケーションで発生した例外エラーの通知を、例外の詳細を表示するリンクを含めて送信します:/** * Get the Slack representation of the notification. * * @param mixed $notifiable * @return SlackMessage */ public function toSlack($notifiable){ $url = url('/exceptions/'.$this->exception->id); return (new SlackMessage) ->error() ->content('Whoops! Something went wrong.') ->attachment(function ($attachment) use ($url) { $attachment->title('Exception: File Not Found', $url) ->content('File [background.jpg] was not found.'); }); }
上記のコードは、次の Slack メッセージを生成します:#
添付ファイルを使用すると、ユーザーに表示する配列データを指定することもできます。読みやすさを向上させるために、指定された配列は表形式で表示されます:
/** * Get the Slack representation of the notification. * * @param mixed $notifiable * @return SlackMessage */ public function toSlack($notifiable){ $url = url('/invoices/'.$this->invoice->id); return (new SlackMessage) ->success() ->content('One of your invoices has been paid!') ->attachment(function ($attachment) use ($url) { $attachment->title('Invoice 1322', $url) ->fields([ 'Title' => 'Server Expenses', 'Amount' => ',234', 'Via' => 'American Express', 'Was Overdue' => ':-1:', ]); }); }
上記のコードは、次の Slack メッセージを生成します:
Markdown 添付ファイルの内容
一部の添付フィールドに Markdown が含まれている場合は、
markdown
メソッドを使用して Slack を構築し、Markdown 形式で記述された添付フィールドを解析して表示できます。このメソッドでサポートされているpretext
、text
、またはfields
を含めます。 Slack の書式設定の詳細については、Slack API ドキュメントを確認してください:/** * Get the Slack representation of the notification. * * @param mixed $notifiable * @return SlackMessage */ public function toSlack($notifiable){ $url = url('/exceptions/'.$this->exception->id); return (new SlackMessage) ->error() ->content('Whoops! Something went wrong.') ->attachment(function ($attachment) use ($url) { $attachment->title('Exception: File Not Found', $url) ->content('File [background.jpg] was *not found*.') ->markdown(['text']); }); }
##Slack 通知ルーティングSlack をルーティングするには通知を適切な場所に送信するには、通知されたエンティティでrouteNotificationForSlack
メソッドを定義する必要があります。このメソッドは、通知の送信先となる Webhook URL を返します。 Webhook URL は、Slack グループに「Incoming Webhook」サービスを追加することで生成できます。
<?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. * * @param \Illuminate\Notifications\Notification $notification * @return string */ public function routeNotificationForSlack($notification) { return 'https://hooks.slack.com/services/...'; } }
ローカライズされた通知Laravel では、通知を行うことができます。現在のロケール以外の言語で送信され、そのロケールはキューに通知するときに記憶されます。 これを実現するために、Illuminate\Notifications\Notification
クラスは、目的の言語を設定するための
localeメソッドを提供します。通知をフォーマットするとき、アプリケーションはこの言語設定に変更され、フォーマットが完了すると前の言語設定に戻ります:
$user->notify((new InvoicePaid($invoice))->locale('es'));
複数の通知のローカライズは、Notification
ファサード実装経由でも利用できます。
Notification::locale('es')->send($users, new InvoicePaid($invoice));
ユーザーの優先ロケール場合によっては、アプリケーションは各ユーザーの優先ロケールを保存します。モデルにHasLocalePreference
メソッドを呼び出す必要はありません。通知が送信されると、通知システムはコントラクトを実装することで、Laravel が通知を送信するときにユーザーが保存した優先言語設定を使用するように指定できます。優先ロケールを自動的に使用します。したがって、このインターフェイスを使用する場合は、
localeIlluminate\Notifications\Events\NotificationSent
で登録できます:イベントをトリガーします。このイベント インスタンスには、通知されたエンティティ (ユーザーなど) と通知インスタンス自体が含まれます。このイベントのリスナーは
EventServiceProvideruse Illuminate\Contracts\Translation\HasLocalePreference; class User extends Model implements HasLocalePreference{ /** * Get the user's preferred locale. * * @return string */ public function preferredLocale() { return $this->locale; } }
{ヒント} EventServiceProviderでリスナーを登録した後、Artisan コマンド
event:generateはリスナー クラスを迅速に生成できます。
、イベント リスナーでは、イベントの
notifiablenotification
、および
channel
プロパティにアクセスして、通知について確認できます。詳細情報:$user->notify(new InvoicePaid($invoice));
とカスタム チャネル
Laravel には複数の通知チャネルが用意されていますが、カスタム チャネル ドライバー 他のチャネルを通じて通知を送信することも簡単です。まず、
sendメソッドを含むクラスを定義します。このメソッドは、
$notifiable$notification: の 2 つのパラメーターを受け取ります。
/** * The event listener mappings for the application. * * @var array */ protected $listen = [ 'Illuminate\Notifications\Events\NotificationSent' => [ 'App\Listeners\LogNotification', ], ];
通知チャネル クラスが定義されると、
via
メソッドを使用してアプリケーションでクラス名を返すことができます。/** * Handle the event. * * @param NotificationSent $event * @return void */ public function handle(NotificationSent $event){ // $event->channel // $event->notifiable // $event->notification // $event->response }
- 通知キュー