[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内のクラスをスキャンし、対応するイベントのpublichandle()メソッドおよびhandleから始まるメソッドを検出します。

その後、これらのパラメータとメソッドを調べてリスナーがどのイベントを処理しているのかを判断することで、EventServiceProviderで現在構成されている手動で構築された配列と基本的に同じイベント/リスナーの配列を構築します。

最後に、明示的に定義されたイベントを検出されたイベントの上にマージし、すべてをDispatcherに登録します。


自動検出が有効になっている場合、検出されたイベントは2つの方法でロードされます。

1. event:cacheコマンドによって生成されたキャッシュファイルからの読み込み

フレームワークがイベントキャッシュファイルを見つけると、イベント/リスナーの設定はそのファイルからロードされます。

EventServiceProviderで明示的に定義されたイベント/リスナーも登録されます。

2. 実行時に毎回自動検出を実行する

イベントキャッシュファイルが見つからない場合は、リクエスト中にイベント/リスナーがその場で検出されます。

余計な処理が増えるため、これはプロダクションにはお勧めできません。

Automatic Event / Listener Discovery - The Laravel Blog

また、自動検出機能の恩恵による登録されたイベント/リスナーの一覧を表示するevent:listコマンドも追加されました。


詳しい変更については以下を確認してください。

Release v5.8.9 · laravel/framework · GitHub

© Xzxzyzyz