【Laravel】Observerが実行されない
投稿日:
環境
- Laravel 5.8
Laravelで設定したObserverの処理が実行されない事があったので、その際の調査メモです。
事象
LaravelのObserverを使いModelのupdating
時に処理が走るようにしようと思ったのですが、
updating
の処理を書いても実行されませんでした。
updating
の処理と同クラス内でupdated
, saving
, saved
の処理を記載すると実行されたので、
Observerのクラス自体が読み込まれていない訳では無さそうでした。
原因
今回Observerを設定しようとしていたクラスには既に別のObserverが設定されていました。
それ自体は問題ないのですが、その既存のObserverのupdating
にて生成した値をreturnしていました。
Laravelのソースを読むと、同イベントのObserverを複数設定している場合、
先行のObserverで値をreturnしてしまうと後続のObserverが実行されないようでした。
https://github.com/laravel/framework/blob/5.8/src/Illuminate/Events/Dispatcher.php#L198-L203
特に理由がない限り、Observerの処理内でreturnはしないほうが良さそうです。