Tips:版本大於 5.8.9 才有這個特性
檢視事件服務提供者父類 Illuminate\Foundation\Support\Providers\EventServiceProvider.php
<?php
namespace Illuminate\Foundation\Support\Providers;
use Illuminate\Support\Facades\Event;
use Illuminate\Support\ServiceProvider;
use Illuminate\Foundation\Events\DiscoverEvents;
class EventServiceProvider extends ServiceProvider
{
...
...
/**
* 判斷是否要自動發現事件和偵聽器(預設關閉)。
*
* @return bool
*/
public function shouldDiscoverEvents()
{
return false;
}
/**
* 獲取發現事件的偵聽器目錄
*
* @return array
*/
protected function discoverEventsWithin()
{
return [
$this->app->path('Listeners'),
];
}
}
進入 app/Providers/EventServiceProvider.php
<?php
namespace App\Providers;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
class EventServiceProvider extends ServiceProvider
{
...
...
...
public function shouldDiscoverEvents()
{
return true;
}
}
如此操作後,就不用在 $listen 陣列中,手動註冊事件與偵聽器。
Tips:在生產環境中,我們肯定不希望每次請求時都掃描所有偵聽器。因此,在部署過程中,我們可以執行 event:cache 命令來快取應用程式所有事件和偵聽器的對應關係。來加快事件註冊。event:clear 命令可用於銷燬快取。
- event:cache 發現並且快取應用中的事件和偵聽器
- event:clear 清除被快取的事件和偵聽器
- event::list 可列出應用中所有事件和偵聽器
本作品採用《CC 協議》,轉載必須註明作者和本文連結