2

在我的应用程序中,我需要扫描生成的输出中的某些元素。看起来这SendResponseEvent在这里会很有帮助,因为它给了我生成的内容,就像它会被发送一样。不幸的是,文档完全没有给我关于如何实际监听此事件的任何线索。我试过这个:

class Module implements InitProviderInterface
{
    public function init(ModuleManagerInterface $moduleManager) {
        $em = $moduleManager->getEventManager();
        $em->attach(SendResponseEvent::EVENT_SEND_RESPONSE, function(SendResponseEvent $e) {
            $content = $e->contentSent();
            /* work on $content */
            $e->setContentSent($content);
        });
    }
}

但是,似乎甚至没有调用侦听器函数。

或者 Zend 2 中是否有更好的方法在 HTML 发送之前对其进行处理?

4

1 回答 1

2

sendResponse事件实际上是由 触发的\Zend\Mvc\SendResponseListener,因此您实际上需要侦听该类引发的事件。您不能通过附加到模块管理器事件管理器来做到这一点,而是需要通过附加到共享事件管理器来做到这一点,您可以从模块管理器事件管理器中获取...

class Module implements InitProviderInterface
{
    public function init(ModuleManagerInterface $moduleManager) 
    {
        $em = $moduleManager->getEventManager();
        // get the shared manager
        $shared = $em->getSharedManager();
        // listen to the Zend\Mvc\SendResponseListener
        $shared->attach('Zend\Mvc\SendResponseListener',
            SendResponseEvent::EVENT_SEND_RESPONSE, 
            function(SendResponseEvent $e) {
                $content = $e->contentSent();
                /* work on $content */
                $e->setContentSent($content);
            });
    }
}
于 2013-05-28T14:09:01.597 回答