ページビューの合計

2023年3月31日金曜日

Laravel Bootcamp: 07. Notifications & Events

へー、新しい投稿があったときにEメールを送る機能を実装するんだ
通知を送る方法としてEメール,SNS, Slackに対応しているようです。.

Creating the notification

$php artisan make:notification NewChirp

 app/Notifications/NewChirp.phpが生成されました。

NewChirp.phpのtoMail()メソッドを修正します。

送信機能の実装に関して
ChirpController クラスの store メソッドから直接通知を送信することもできるがContollerの負荷が増えるのでバッググランドで動くイベントを使用して通知を行うようです。
 

Creating an event

$php artisan make:event ChirpCreated
イベントを生成します。
app/Events/ChirpCreated.phpが生成されました。

ChirpCreated.phpのコンストラクタを修正します。

Dispatching the event

app/Models/Chirp.phpを修正します。
Chirpが生成されるたびにイベント:ChirpCreatedも生成されます。

Creating an event listener

EventとListenerの関係が良く分からないのでぐぐってみました。

イベント
何らかの処理をきっかけにイベントを発行します。
イベントを生成するだけで実際の処理をするわけではありません。

リスナー
イベントの発生を監視していて、実際の処理を行うのはリスナー、今回だと通知を送る処理ですね。
イベント毎にリスナーを作成します。

これを読めばLaravelのイベントとリスナーが設定できる

Laravelでイベントとリスナーを使ってみる

$php artisan make:listener SendChirpCreatedNotifications --event=ChirpCreated

app/Listeners/SendChirpCreatedNotifications.phpが生成されました。

イベント:ChirpCreatedに対してリスナーを作成するということですね。

handle()メソッドで、自分以外の全てを対象にするようにループして通知を送るようにしているようです。

ループ内ではcursorを使ってDBから対象を取得していますが、これは一度に全てのユーザをロードすることを回避するためだそうです。

ぐぐるとcursorとchunkがあり、一度にデータを取得せず小分けにしてメモリの消費量を抑えるためのもののようです。

 

Registering the event listener

イベントリスナーの登録
?リスナーを作っただけでは駄目で登録が必要なようです。

App/Providers/EventServiceProvider.php

EventServiceProvider.phpは最初から存在しています。
EventServiceProvider クラスの$listenにイベントとリスナーを登録します。

実際に投稿してその他のユーザに通知を送信するか試します。

受け取るには本人以外のユーザが必要なのでユーザを新規に登録します。

後はメール送信環境
ドキュメントでは MailHogが推奨されています。Laravel Sailの環境であれば含まれているようです。
MailHogでぐぐるとDockerの環境で使う話ばかり出てきます。
うーん、めんどいのでクラウドで使うサービスを使うことにします。
MailTrapを使ってみます。
https://mailtrap.io/
Sign up for freeを押して情報入力します。


届いたメールのリンクを押下したら、入力したアカウントでログインします。

送信メールを送信するための設定に関して

左のメニューのEmail Testing→Inboxesをクリックします。

画面にInboxesが表示されるのでMy Inboxをクリックします。

SMTP Settingsが表示されます。

Integrationsのドロップダウンで「Laravel 7+」を選択します。

Laravel用のSMTP設定が表示されます。

表示内容をLaravelプロジェクトの.envファイルに反映します。

反映前

 

反映後

 

現在ユーザAとBが存在する状態です。

ユーザAでログインして投稿を行います。

ユーザBに対して通知メールが送信されるはずです。

MailTrap上で想定したメールが送信されたことが確認できました。


では次のチャプターに行きましょう

Continue to learn about deploying your application...


0 件のコメント:

コメントを投稿

Laravel再学習

フロントエンド系の方に興味が行っていましたがまたバックエンド系に戻ってきました。 Laravelです。 かなり忘れてます、自分のブログを見ながらもう一度です。 今回はMVCパターン、そして Eloquentを使えるようになるのが目的です。 まずはプロジェクト作成から 1. Com...