CakePHP 3实现了事件配置数组覆盖问题

时间:2016-02-04 13:38:05

标签: events cakephp-3.0

以下是示例代码:

    class UsersController extends AppController
    {
        ...
        public function implementedEvents()
        {
            return [
                'Auth.logout' => 'afterLogout'
            ];
        }

        public function afterLogout($event)
        {
            $this->Flash->toast(__('Good bye!'));
        }
        ...
    }

在实施implementedEvents()方法之前,AppController::beforeRender()方法已正确触发。 我需要听Auth.logout事件,所以写了implementedEvents()方法。我以为它会合并到默认的事件数组中。但在那之后,AppController::beforeRender()停止了工作。它没有再触发了。所以我猜这是一种覆盖行为。

这是CakePHP 3的默认行为吗?这是预期的行为还是错误?

1 个答案:

答案 0 :(得分:2)

这是预期的行为,否则覆盖而不是合并会很复杂。

如果您需要合并可能的父侦听器配置,那么您需要自己完成,例如

public function implementedEvents()
{
    return [
        'Auth.logout' => 'afterLogout'
    ] + parent::implementedEvents();
}