【Laravel】Eloquentモデルのイベント処理を実装する
今回はLaravelのイベント機能を使用して、Eloquentの作成、更新、削除のイベントを補足する方法を解説します。
イベントとは
LaravelではEloquentの生成、変更、削除時などにイベントを発生させます。発生したイベントにリスナーを登録しておくことで、リスナーがイベントに対する処理を行います。
今回やりたいこと
Laravelの初期状態で存在するUserモデルを利用します。User作成時のイベントを補足する手順を解説していきます。
ユーザー登録イベントを補足する
イベントとリスナーのオブジェクトを作成する
まずはイベントとリスナーのオブジェクトを作成しましょう。EventServiceProviderクラスの$listen内にUserCreatedイベントを登録します。そしてUserCreatedイベントの中にSendUserCreatedNotificationリスナーを登録します。これでUserCreatedイベントの発行時にSendUserCreatedNotificationリスナーが実行される設定ができました。
use App\Events\UserCreated;
use App\Listeners\SendUserCreatedNotification;
protected $listen = [
UserCreated::class => [
SendUserCreatedNotification::class,
]
];
EventServiceProviderにUserCreatedとSendUserCreatedNotificationを登録しましたが、クラス自体はまだ作成されていません。event:generateコマンドを実行してクラスを作成しましょう。event:generateコマンドはEventServiceProviderに登録したイベントとリスナーを自動生成するコマンドです。
php artisan event:generate
実行すると以下のファイルが作成されます。
- app/Events/UserCreated.php(イベント)
- app/Listeners/SendUserCreatedNotification.php(リスナー)
Userモデルでイベントをディスパッチ(発行)する
次にUserモデルの生成時イベントを補足する処理を記述していきます。app/Models/User.phpを編集し、$dispatchesEventsをオーバーライドします。’created’ => UserCreated::classを記述します。これはモデルのcreated(生成時イベント)を補足して先程作成したUserCreatedイベントクラスをディスパッチするという意味です。このように記述することで最終的にUserCreatedに紐づくSendUserCreatedNotificationリスナーが実行されます。
use App\Events\UserCreated;
class User extends Model
{
protected $dispatchesEvents = [
'created' => UserCreated::class
];
}
ではSendUserCreatedNotificationリスナーを編集します。リスナーの中にhandleメソッドが定義されており、その中に実行したい処理を記述していきます。今回はリスナーが呼ばれていることを確認するため、ログを出力します。
public function handle(UserCreated $event)
{
\Log::debug('user created');
}
ここまででプログラミングは完了です。実際にUserモデルを作成してみましょう。SendUserCreatedNotificationのhandleメソッドが呼ばれて、ログが出力されるはずです。
まとめ
Eloquentのイベントには今回紹介したcreatedの他にもsaved(更新時)、deleted(削除時)など、いくつかの種類があります。Eloquentのライフサイクルに合わせて実行したい処理がある場合には、イベントを使用するのがおすすめです。
ディスカッション
コメント一覧
まだ、コメントがありません