[Laravel] 5.8.9がリリースされました
laravel/frameworkのバージョン5.8.9がリリースされました。追加された機能について確認します。
リスナーイベントの自動検出機能が追加されました (#28064, #28085)
イベントとリスナーの紐付けを行うにはサービプロバイダー内で明示的に定義する必要がありましたが、これを自動検出可能になりました。
自動検出を利用するにはshouldDiscoverEvents()
メソッドがtrue
を返す必要があります。(デフォルトはfalse
です)
app/Providers/EventServiceProvider.php
:
/**
* Determine if events and listeners should be automatically discovered.
*
* @return bool
*/
public function shouldDiscoverEvents()
{
return true;
}
自動検出機能を利用する場合には、フレームワークはapp/Listeners
内のクラスをスキャンし、対応するイベントのpublic
なhandle()
メソッドおよびhandle
から始まるメソッドを検出します。
その後、これらのパラメータとメソッドを調べてリスナーがどのイベントを処理しているのかを判断することで、EventServiceProvider
で現在構成されている手動で構築された配列と基本的に同じイベント/リスナーの配列を構築します。
最後に、明示的に定義されたイベントを検出されたイベントの上にマージし、すべてをDispatcher
に登録します。
自動検出が有効になっている場合、検出されたイベントは2つの方法でロードされます。
1. event:cache
コマンドによって生成されたキャッシュファイルからの読み込み
フレームワークがイベントキャッシュファイルを見つけると、イベント/リスナーの設定はそのファイルからロードされます。
EventServiceProvider
で明示的に定義されたイベント/リスナーも登録されます。
2. 実行時に毎回自動検出を実行する
イベントキャッシュファイルが見つからない場合は、リクエスト中にイベント/リスナーがその場で検出されます。
余計な処理が増えるため、これはプロダクションにはお勧めできません。
また、自動検出機能の恩恵による登録されたイベント/リスナーの一覧を表示するevent:list
コマンドも追加されました。
詳しい変更については以下を確認してください。