【Laravel】EventとListenerについて

【Laravel】EventとListenerについて

仕事で既存の機能に新しい機能を追加しようと思っていた時に、既存の機能に「Event」などとこうものがあった。

初めて聞いた用語だったので、どのようなものなのか調べてみた。

Eventに対してListener

僕が見たコードはEventしかなかったが、実はこのEventというのはListenerというヤツとセットになっている。

一心同体である。

簡単に言うと、Eventはイベント発火の「合図」の役割を担っている。

それに対して、Listenerはその合図を実際に感知してイベントを「実行」する役割を担っている。

Eventの長所の1つは、1つのEventが複数のListenerを実行させることができる点である。

それを紐づけるEventServiceProvider

先ほど紹介したEventとListenerは勝手に連動してイベントを実行するわけではない。

これらは今紹介している「EventServiceProvider」によって紐づけられ、特定にEventには特定の Listenerが実行されるようになっている。

Eventの書き方

通常Eventはapp/Eventsディレクトリに書く。

デフォルトの状態ではEventsディレクトリは存在しないかも知れないが、Atrisanコマンドによって簡単に生成できる。

正直よく分からん。

Listenerの書き方

一方でListenerは通常app/Listenersディレクトリに書く。

artisanによって生成されるListenerファイルはhandleメソッドがデフォルトで用意されている。

このhandleメソッドにはEventによって実際に実行される内容を書く。

EventServiceProviderに書き方

EventServiceProviderファイルはApp\Providersディレクトリに書く。

ここにlistenプロパティに、実際に紐づけたEventとListenerを書いていく。

Eventを発火させる

  • Event(発火)
  • Listener(実行)
  • EventServiceProvider(紐付け)

の3つを完了したから、あとは最初の発火をさせるコードを書くだけ。

例えばRegisterController.phpのcreateメソッドの中でeventヘルパー関数を使って、イベントを発火させるとする。

こんな感じでEventを実行させたいタイミングでeventヘルパー関数を用いると、Eventが発火して、Listenerが内容を実行してくれる。