Laravelモデルでイベントをディスパッチする方法


  1. イベントの作成: まず、php artisan make:eventコマンドを使用して、イベントクラスを作成します。例えば、UserCreatedというイベントを作成する場合は、以下のコマンドを実行します。

    php artisan make:event UserCreated

    これにより、app/EventsディレクトリにUserCreatedクラスが生成されます。

  2. イベントのリスナーの作成: 次に、イベントがディスパッチされた際に実行される処理を記述するリスナーを作成します。リスナーは、php artisan make:listenerコマンドを使用して生成することができます。例えば、SendNotificationというリスナーを作成する場合は、以下のコマンドを実行します。

    php artisan make:listener SendNotification --event=UserCreated

    これにより、app/ListenersディレクトリにSendNotificationクラスが生成されます。

  3. イベントのディスパッチ: モデルでイベントをディスパッチするためには、Illuminate\Contracts\Events\Dispatcherインターフェースを使用します。モデルの任意のメソッド内で、以下のようにイベントをディスパッチします。

    use Illuminate\Support\Facades\Event;
    use App\Events\UserCreated;
    Event::dispatch(new UserCreated($user));

    この例では、UserCreatedイベントをディスパッチしています。$userは、新しく作成されたユーザーオブジェクトです。

  4. イベントとリスナーの紐付け: 最後に、イベントとリスナーを紐付ける必要があります。これには、app/Providers/EventServiceProviderクラスを使用します。$listenプロパティに、イベントとリスナーのマッピングを定義します。例えば、UserCreatedイベントとSendNotificationリスナーを紐付ける場合は、以下のように定義します。

    protected $listen = [
       UserCreated::class => [
           SendNotification::class,
       ],
    ];

    これにより、UserCreatedイベントが発生した際にSendNotificationリスナーが実行されるようになります。

以上の手順に従うことで、Laravelモデルでイベントをディスパッチすることができます。これにより、アプリケーション内のさまざまなアクションに対して、追加の処理や通知を行うなどの柔軟な拡張が可能になります。