以下是示例代码:
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的默认行为吗?这是预期的行为还是错误?
答案 0 :(得分:2)
这是预期的行为,否则覆盖而不是合并会很复杂。
如果您需要合并可能的父侦听器配置,那么您需要自己完成,例如
public function implementedEvents()
{
return [
'Auth.logout' => 'afterLogout'
] + parent::implementedEvents();
}