有没有一种方法可以为 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');
});
}
最佳答案
它为 dispatch 而不是 dispatch.error 工作的原因是 dispatch 事件是从 Controller 内部触发的(参见 Zend\Mvc\Controller\AbstractController::dispatch)
因为您使用自己的命名空间 Controller 扩展此类,所以可以将事件与该命名空间相关联。
但是,dispatch.error 事件可能会在 Controller (以及命名空间的上下文)加载之前触发。这根据 Zend\Mvc\DispatchListener 中的多个条件发生。
为了自定义处理 dispatch.error 的方式,您可能需要为该事件编写一个自定义监听器,或者甚至编写您自己的 DispatchListener(尽管我不建议这样做)。然后,您也许可以查看 routeMatch 以确定下一步要做什么。如果您使用的是 ModuleRouteListener,这可能非常简单。
关于php - ZF2 : How to attach module specific listener for dispatch. 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17948543/