Laravel 事件系統新特性

曾是然發表於2019-05-06

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 協議》,轉載必須註明作者和本文連結
Hello。

相關文章