有没有办法为该事件附加一个事件侦听器dispatch.error
在 Zend Framework 2 中,该侦听器将仅附加到与 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.error 的原因是调度事件是从控制器内部触发的(请参阅 Zend\Mvc\Controller\AbstractController::dispatch)
因为您使用自己的命名空间控制器扩展此类,所以可以将事件与该命名空间关联。
但是,dispatch.error 事件可能会在加载控制器(以及命名空间的上下文)之前触发。这种情况根据 Zend\Mvc\DispatchListener 中的多个条件发生。
为了自定义处理dispatch.error的方式,您可能需要为该事件编写一个自定义侦听器,甚至编写您自己的DispatchListener(尽管我建议不要这样做)。然后,您也许可以查看路线匹配来确定下一步要做什么。如果您使用 ModuleRouteListener 这可能非常简单。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)