前回Observeパターンに触れましたが、少し似たパターンとしてevent-listenerを使ったパターンが存在します。
Model(Eloquentのフック)というのが大まかな共通項ですかね。
そもそもObsereveパターンを使おうとしたのですが、after_commit=true(commitが成功した時のみ実行)のオプションを設定するとテストコード時にobserveが動かない・・・ということが発生しました。(Laravelのバグのようです。)
DB::afterCommit callbacks aren’t run in tests when RefreshDatabase trait is used
というわけで代替案としてevent-listenerを。
公式ドキュメント
https://readouble.com/laravel/8.x/ja/events.html
event-listenerパターンを実装した詳しいソースは以下に書きました。
https://github.com/umanari145/effector/commit/2bbe928ec03b9c5df13660e5863cc7154653eb5f
observeというと監視という形なのでLogのようなケースで使われるのですが、こちらはもっと幅広く、特定動作の後にフックさせるというパターンで使われるようです。
ちなみに下記の記事でうまくまとまっててわかりやすかったです。