php - ZF2 : How to attach module specific listener for dispatch. 错误

标签 php events zend-framework2

有没有一种方法可以为 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/

相关文章:

php - Zend Framework 2 包括自定义库

zend-framework2 - 在哪里可以找到 module.config.php 的所有选项?

php - 不断刷新聊天内容

php - 如何更改jpg质量导出?

php - PHP 脚本没有响应

php - 使用 PHP 将事件添加到 Baikal CalDAV 服务器

PHP 子字符串提取。获取第一个 '/' 之前的字符串或整个字符串

C#事件继承

c# - 动态图像按钮点击事件没有被触发

testing - ZF2。替代让 AbstractController(或其他类)实现 ServiceLocatorAwareInterface?