Laravel11、イベントとリスナーの紐付きが崩れる

開発環境と本番環境を分けていると発症しやすい。
タイミングはgit pullやデプロイ時。
可読性を上げるためにフォルダ分けして名前空間がネストすると起こる。
厄介なことに、キュープロセスを使っている場合は症状がわかりにくい。

# 以下コマンドでエラーが出ると関係が崩れています。
php artisan event:list

0.試してないけど、多分これが正解

下記に方法を記述していますが、きっとこれが正解。

php artisan event:clear
php artisan config:clear

# 必要に応じて以下を実行
php artisan event:cache

1. 非公式だが鉄板と思われる方法

検索すればわかるのですが
bootstrap/cache
にキャッシュされています。
恐らく、イベントまたはリスナー作成時に記録されると思うのですが、ここは.gitigonore領域に設定されています。

rm -rf bootstrap/cache/*.php
php artisan event:cache

# 以下で異常がなければOK
php artisan event:list

2. 公式にもある方法

ただ、リスナーの階層分けには言及していないので、その場合の利用は非公式かもしれません。

use App\Events\Photo\PhotoSaving;
use App\Events\Report\ReportCreating;
use App\Listeners\Photo\SaveDbAndStorage;
use App\Listeners\Report\GetAndSavePhotoForReport;
use App\Rtl\Laravel\Providers\_AppServiceProvider;
use Illuminate\Support\Facades\Event;


class AppServiceProvider extends _AppServiceProvider
{
    public function boot(): void
    {
        Event::listen(
            ReportCreating::class, // イベント
            GetAndSavePhotoForReport::class, // リスナー
        );

        // 複数個ある場合は連投する。
        Event::listen(
            PhotoSaving::class,
            SaveDbAndStorage::class,
        );
    }
}

この方法だと、git pull しても明示的に定義されているので関係は崩れず、ちゃんとトリガーします。
しかしキャッシュをクリアしていないので
php artisan event:list
では引き続きエラーが出ます。

総括

一人で開発なら1.をチームで開発するなら2.が良いのでは?

投稿者プロフィール

TakaharaRyuji
PAGE TOP