# 事件/Events 事件是现代 web 应用中用于通信的一个流行概念。事件在代码执行的某个阶段被触发。扩展中的任何其他代码,都可以注册一个或多个事件,并在特定的时间执行操作。 事件由它的标识符定义,标识符是一段独一无二的字符串。(例如,`boot` 是在 Pagekit 应用程序的启动阶段触发的事件)。 在此文档中,你将了解所有可以监听的可用事件,以及如何在 Pagekit 中注册事件监听器。 ## 系统事件 Pagekit 在页面请求的生命周期内提供了一系列事件: - `boot`: Pagekit 应用开始运行的启动阶段 - `request`: 内核的请求处理已启动 - `controller`: 即将被调用的控制器操作 - `response`: 即将被发送到浏览器的响应 - `terminate`: Pagekit 应用程序的响应已成功发出 - `exception`: 发生的异常/An exception has occured. ## 授权事件/Auth-Events 所有授权相关事件都在这里定义: `Pagekit\Auth\AuthEvents`. ## 数据库与实体管理器 Database / EntityManager 对于每个实体被加载(loaded)、更新(updated)、创建(created),都会触发特定的事件。例如,如果小工具被加载了,就会触发 `model.widget.init` 事件。 实体事件名称的架构是 `model.entity_short_name.event_name`。这个泛型事件系统允许你监听单个实体。 可以在这里找到所有实体管理器事件:`Pagekit\Database\Events`。 ## 路由 路由在执行前后会触发一个事件。每个事件名称都包含在已执行的 url 中: `before@site/api/node/save` 或 `after@system/settings/save` ## 注册事件监听器 EventListener 我们来注册一个在页面被保存时调用的事件监听器。 必须在包的`index.php` 中注册监听器: ``` return [ // 你的包的定义 '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 } } ```