Events ZF3事件管理器仅适用于事件调度

Events ZF3事件管理器仅适用于事件调度,events,zend-framework3,Events,Zend Framework3,在ZF3自定义模块中,我需要截获一些事件 在module.config.php中,函数init()是: public function init(ModuleManager $manager) { $eventManager = $manager->getEventManager(); $sharedEventManager = $eventManager->getSharedManager(); $sharedEventManager

在ZF3自定义模块中,我需要截获一些事件

module.config.php
中,函数
init()
是:

public function init(ModuleManager $manager)
{        
    $eventManager = $manager->getEventManager();    
    $sharedEventManager = $eventManager->getSharedManager();
    $sharedEventManager->attach(__NAMESPACE__, MvcEvent::EVENT_DISPATCH, [$this, 'onDispatch'], 100);
    $sharedEventManager->attach(__NAMESPACE__, MvcEvent::EVENT_DISPATCH_ERROR, [$this, 'onDispatchError'], 110);
}
在同一类中,有两个函数:

public function onDispatch(MvcEvent $event)
{        
    echo 'testOnDispatch';
    die;   
}

public function onDispatchError(MvcEvent $event)
{        
    echo 'testOnDispatchError';
    die;        
}
EVENT\u DISPATCH
事件在没有任何问题的情况下被触发,但
EVENT\u DISPATCH\u ERROR
未被触发。在一些测试之后,我看到只有
事件\u DISPATCH
事件被触发

在视图管理器配置中,
display\u not\u found\u reason
display\u exceptions
都设置为
TRUE
。如果我用
事件调度
(两次
事件调度
)替换
事件调度
)错误,则优先级方面一切正常


我遗漏了什么?

可能仅仅意味着您正在某个地方调度某个事件,并且在调度事件代码/触发器期间代码中没有错误。在
onDispatch
函数中,您可以做Zend在
应用程序
类中已经做过的测试。查看您的供应商包,文件:
vendor/zendframework/zendmvc/src/Application.php
第330行()。也可以。Gl&hfrkeet,谢谢您的回复。对于
事件\u调度\u错误
,这是有意义的。同时,作为一个例子,
EVENT\u FINISH
也不起作用。在MVC完成的任何情况下都应该调度该事件,对吗?理论上:是的。但是,要找到它的实现位置,看看它是否在任何地方被调用。如果您使用的是PhpStorm,则可以通过按住Ctrl键并单击(在常量上,或在apple上单击“Cmd”)找到它的声明。对常量声明执行相同操作(Ctrl/Cmd+单击)将显示(或要求显示)所述常量的所有实现。查看结果,看看是否使用了它。从github链接(prev comment),它将沿着
$events->triggerEvent($event)的路线运行
查找使用的
MvcEvent::EVENT\u DISPATCH
不是
const EVENT\u DISPATCH
的地方。我按照您的建议,在
zendframework\zend mvc\src\sendsresponselistener.php中找到了
EVENT\u FINISH
注册的第74行(仅一次)实际上调用了回调函数
sendResponse
。我还在第283行的zend eventmanager\src\eventmanager.php中找到了函数
triggerListeners
。我检查了事件的名称,是的,会触发
EVENT\u DISPATCH\u ERROR
on route ERROR或
EVENT\u FINISH
等事件。这个函数的有趣之处在于count
$listOfListenersByPriority
是1。因此,我觉得模块中的侦听器没有连接。我在这里找到了一个解决方法[不确定这是错误还是功能…无论如何,感谢您的帮助。根据您的建议,我学到了很多可能性。