事件
现代网络应用中一个流行的沟通概念是事件。在代码执行的某个阶段触发了事件。任何其他代码,包括你的扩展,都可以注册到一个或多个事件,并在特定时间执行作。
事件总是由其标识符定义,该字符串是唯一字符串(即在 Pagekit 应用程序启动阶段触发的事件)。boot
在本文档中,您将了解可收听的活动信息,以及如何在Pagekit中注册活动听众。
系统事件
Pagekit 在页面请求生命周期内提供了一组事件:
boot:Pagekit 应用的启动阶段已开始。request内核请求处理已开始。controller: 控制器动作即将被调用。response: 回复即将发送到浏览器。terminate:Pagekit申请的回复已成功发送。exception:发生了例外。
授权事件
所有授权事件均定义于。Pagekit\Auth\AuthEvents
数据库 / 实体管理器
对于每个被加载、更新或创建的实体,都会触发一个特定的事件。例如,如果加载了一个小部件,就会触发一个事件。model.widget.init
实体事件名称的模式为 。这种通用事件系统允许你监听单个实体。model.entity_short_name.event_name
你可以在 中找到所有 EntityManager 事件的列表。Pagekit\Database\Events
路由器
路由器在路由执行前后触发事件。每个事件名称都包含执行的URL:或before@site/api/node/saveafter@system/settings/save
注册一个EventListener
我们注册一个监听器,当页面被保存时会被调用。
你必须在你的套餐中注册监听者:index.php
return [
// your packge definition
'events' => [
'boot' => function ($event, $app) {
$app->subscribe(new \Acme\Listener\PostSaveListener());
}
]
];
以及监听者代码:
<?php
namespace Acme\Listener;
use Pagekit\Event\Event;
use Pagekit\Event\EventSubscriberInterface;
class PostSaveListener implements EventSubscriberInterface
{
/**
* {@inheritdoc}
*/
public function subscribe()
{
return [
'model.page.saved' => 'onSaved',
];
}
/**
* @param Event $event
* @param object $model The saved entity
*/
public function onSaved(Event $event, $model)
{
// your code
}
}