跳至主要内容

事件

现代网络应用中一个流行的沟通概念是事件。在代码执行的某个阶段触发了事件。任何其他代码,包括你的扩展,都可以注册到一个或多个事件,并在特定时间执行作。

事件总是由其标识符定义,该字符串是唯一字符串(即在 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
    }
}