有没有一种方法可以为Zend Framework 2中的事件dispatch.error
附加一个事件侦听器,其中该侦听器将只附加到与Module.php相关的EventManager?
我通过将dispatch
的侦听器附加到全局SharedManager并将当前Module.php的命名空间作为第一个参数来传递,从而实现了这一点。当我为dispatch.error
尝试同样的方法时,它工作得很好,但不起作用。
以下是Module.php中的一个示例:
public function init(ModuleManager $moduleManager)
{
$sharedManager = $moduleManager->getEventManager()->getSharedManager();
$sharedManager->attach(__NAMESPACE__, 'dispatch', function($e) {
exit('IT WORKS');
});
$sharedManager->attach(__NAMESPACE__, 'dispatch.error', function($e) {
exit('IT DOES NOT WORK');
});
}
它正在进行调度,但没有进行调度。错误是调度事件是从控制器内部触发的(请参阅Zend''Mvc''controller''AbstractController::dispatch)
因为您使用自己的命名空间控制器扩展了这个类,所以可以将事件与该命名空间相关联。
但是,dispatch.error事件可能会在加载控制器(以及命名空间的上下文)之前触发。这是根据Zend''Mvc''DispatchListener中的多个条件发生的。
为了自定义dispatch.error的处理方式,您可能需要为该事件编写一个自定义侦听器,甚至编写自己的DispatchListener(尽管我建议不要这样做)。然后,你可以查看routeMatch,了解下一步你想做什么。如果您正在使用ModuleRouteListener,这可能非常容易。