我该在哪里获取完整的 Laravel 事件列表(由核心库触发)?

26
我想知道Laravel核心库触发了哪些事件。 我想获得完整的列表,例如laravel.querylaravel.done官方文档列出了四个事件,但我认为Laravel有比这四个更多的事件!
4个回答

46

Laravel实际上没有像你想象的那样触发大量事件。虽然它确实利用了事件系统,但它是供开发人员在应用程序中使用的。无论如何,这里是我编写的列表。

laravel.done
laravel.log
laravel.query
laravel.resolving
laravel.composing: {viewname}
laravel.started: {bundlename}
laravel.controller.factory
laravel.config.loader
laravel.language.loader
laravel.view.loader
laravel.view.engine

view.filter

eloquent.saving
eloquent.updated
eloquent.created
eloquent.saved
eloquent.deleting
eloquent.deleted
eloquent.booted: {$model}
eloquent.booting: {$model}


500
404

500404 均为错误相关事件。这些事件在 routes.php 文件中设置,因此您可以查看默认监听器是什么。

我想指出的是,eloquent.{event} 还有另一种变体,其中包含正在更新的类名。

eloquent.{event}: {classname}

我不会说这是所有的内容,但至少应该有99%。


1
值得注意的是,在5.4版本中,上述某些内容已被重命名或删除。我正在寻找与laravel.done事件类似的东西,但很难找到任何文档。我建议只监听所有带有*的事件,并记录传递的事件调度器实例,以了解可用的内容。 - Bower

19

除了Jason Lewis的答案,我还有几点要补充。我简单搜索了fire()函数,并列出了以下Laravel 5版本的列表:

$this->events->fire('auth.attempt', $payload);
$this->events->fire('auth.login', [$user, $remember]);
$this->events->fire('auth.logout', [$user]);
$this->events->fire('cache.'.$event, $payload);
$this->laravel['events']->fire('cache:clearing', [$storeName]);
$this->laravel['events']->fire('cache:cleared', [$storeName]);
$events->fire('artisan.start', [$this]);
$this->events->fire('illuminate.query', array($query, $bindings, $time, $this->getName()));
$this->events->fire('connection.'.$this->getName().'.'.$event, $this);
$this['events']->fire('bootstrapping: '.$bootstrapper, [$this]);
$this['events']->fire('bootstrapped: '.$bootstrapper, [$this]);
$this['events']->fire('locale.changed', array($locale));
$this['events']->fire($class = get_class($provider), array($provider));  //after provider registered.
$this->app['events']->fire('kernel.handled', [$request, $response]);
$this->dispatcher->fire('illuminate.log', compact('level', 'message', 'context'));
$this->events->fire('mailer.sending', array($message));
$this->events->fire('illuminate.queue.failed', array($connection, $job, $data));
$this->events->fire('illuminate.queue.stopping');
$this->events->fire('router.matched', [$route, $request]);
$this->events->fire('composing: '.$view->getName(), array($view));
$this->events->fire('creating: '.$view->getName(), array($view));

Illuminate\Mail\Events\MessageSending - zeros-and-ones

4

如果您正在调试Laravel应用程序,可以使用以下代码片段在控制台中获取当前运行进程的所有已触发事件列表(例如当您运行单元测试或Artisan命令时):

Event::listen('*', function ($event) {
    echo $event."\n";
});

如果您使用logger函数,它将会进入一个无限循环。

3
以下是一些其他的事件,我在转储static::$events时获得了它们。
laravel.config.loader
laravel.view.loader
laravel.language.loader
laravel.view.engine
404

不太确定覆盖这些是否会起作用,因为它们在内部被调用。


你实际上可以监听这些事件并定义自己的自定义加载器。如果您想要一个级联加载系统来处理配置/视图/语言文件,这非常有用。我偶尔会这样做。 - Jason Lewis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接