codecamp

Laravel 8 事件发现

你可以启用自动事件发现,而不是在 EventServiceProvider$listen 数组中手动的注册事件和监听器。事件发现启用后,Laravel 会通过扫描你应用的 Listeners 目录来自动的查找和注册事件和监听器。此外,EventServiceProvider 中列出的任何明确定义的事件仍将被注册。

Laravel 通过使用反射扫描监听器类来查找事件监听器。 当 Laravel 找到以 handle 开头的监听器类方法时,Laravel 会将这些方法注册为方法签名中类型提示的事件的事件监听器:

use App\Events\PodcastProcessed;

class SendPodcastProcessedNotification
{
    /**
     * 处理给定的事件。
     *
     * @param  \App\Events\PodcastProcessed
     * @return void
     */
    public function handle(PodcastProcessed $event)
    {
        //
    }
}

事件发现默认情况下是禁用的,但你可以通过覆盖应用程序的 EventServiceProvidershouldDiscoverEvents 方法来启用它:

/**
 * 确定是否应自动发现事件和侦听器
 *
 * @return bool
 */
public function shouldDiscoverEvents()
{
    return true;
}

默认情况下,在应用程序的 Listeners 目录中的所有监听器将被扫描。如果你想要定义扫描其他目录,可以覆盖 EventServiceProvider 中的 discoverEventsWithin 方法:

/**
 * 获取应该用于发现事件的监听器的目录
 *
 * @return array
 */
protected function discoverEventsWithin()
{
    return [
        $this->app->path('Listeners'),
    ];
}

在生产环境中,你可能不希望框架在每个请求上扫描所有监听器。 因此,在部署过程中,你应该运行 event:cache Artisan 命令来缓存应用程序的所有事件和监听器的列表。 框架将使用此列表来加速事件注册过程。event:clear 命令则可用于销毁缓存。

技巧:event:list 命令可用于显示应用程序注册的所有事件和监听器的列表。

Laravel 8 通配符事件监听器
Laravel 8 手动访问队列
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

Laravel 8 入门指南

Laravel 8 基础功能

Laravel 8 前端开发

Laravel 8 安全相关

Laravel 8 综合话题

数据库

Eloquent ORM

测试相关

官方拓展包

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }