-
イベントの作成: まず、
php artisan make:event
コマンドを使用して、イベントクラスを作成します。例えば、UserCreated
というイベントを作成する場合は、以下のコマンドを実行します。php artisan make:event UserCreated
これにより、
app/Events
ディレクトリにUserCreated
クラスが生成されます。 -
イベントのリスナーの作成: 次に、イベントがディスパッチされた際に実行される処理を記述するリスナーを作成します。リスナーは、
php artisan make:listener
コマンドを使用して生成することができます。例えば、SendNotification
というリスナーを作成する場合は、以下のコマンドを実行します。php artisan make:listener SendNotification --event=UserCreated
これにより、
app/Listeners
ディレクトリにSendNotification
クラスが生成されます。 -
イベントのディスパッチ: モデルでイベントをディスパッチするためには、
Illuminate\Contracts\Events\Dispatcher
インターフェースを使用します。モデルの任意のメソッド内で、以下のようにイベントをディスパッチします。use Illuminate\Support\Facades\Event; use App\Events\UserCreated; Event::dispatch(new UserCreated($user));
この例では、
UserCreated
イベントをディスパッチしています。$user
は、新しく作成されたユーザーオブジェクトです。 -
イベントとリスナーの紐付け: 最後に、イベントとリスナーを紐付ける必要があります。これには、
app/Providers/EventServiceProvider
クラスを使用します。$listen
プロパティに、イベントとリスナーのマッピングを定義します。例えば、UserCreated
イベントとSendNotification
リスナーを紐付ける場合は、以下のように定義します。protected $listen = [ UserCreated::class => [ SendNotification::class, ], ];
これにより、
UserCreated
イベントが発生した際にSendNotification
リスナーが実行されるようになります。
以上の手順に従うことで、Laravelモデルでイベントをディスパッチすることができます。これにより、アプリケーション内のさまざまなアクションに対して、追加の処理や通知を行うなどの柔軟な拡張が可能になります。