【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はしないほうが良さそうです。