Cakephp 3事件:函数名必须是字符串

时间:2016-02-11 11:23:50

标签: cakephp events cakephp-3.0

在我的助手中,我有以下代码:

$event = new Event('Helper.Regions.beforeSetBlock', $this->_View, [
            'content' => &$block['Block']['body']
        ]);
EventManager::instance()->dispatch($event);

这是我的事件监听器类:

public function implementedEvents()
{
        return [
            'Helper.Regions.beforeSetBlock' => 'filterBlockShortcode'
        ];
}

public function filterBlockShortcode($event) {

}

在bootstrap.php中我注册了这样的事件:

EventManager::instance()->on(
    'Helper.Regions.beforeSetBlock',
    new BlocksEventHandler()
)

但我收到以下错误:

  

错误:函数名称必须是字符串

     

文件C:\ wamp \ www \ CookieCMS \ vendor \ cakephp \ cakephp \ src \ Event \ EventManager.php

     

行:387

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您正在以错误的方式注册侦听器,您正在执行的是注册可调用的方式,即您传递的事件的名称应该调用第二个参数中的可调用对象。

实现\Cake\Event\EventListenerInterface的侦听器对象必须作为第一个参数传递,它们本身提供了他们想要侦听的事件的名称。

EventManager::instance()->on(
    new BlocksEventHandler()
);

另请参阅 Cookbook > Events > Registering Listeners