Php Zend Framework:如何在最终视图输出之前进入它';是否已发送到浏览器?
我试图在最终的xhtml输出作为字符串发送到浏览器之前访问它。操作和插件的postDispatch()方法似乎还为时过早。当我使用调试器单步执行Php Zend Framework:如何在最终视图输出之前进入它';是否已发送到浏览器?,php,zend-framework,pdf,rendering,Php,Zend Framework,Pdf,Rendering,我试图在最终的xhtml输出作为字符串发送到浏览器之前访问它。操作和插件的postDispatch()方法似乎还为时过早。当我使用调试器单步执行Zend\u Controller\u Front::dispatch()方法时,我可以在最后调用$this->\u response->sendResponse()之前,通过添加一个监视表达式$this->getResponse()->getBody(),以字符串的形式访问所需的输出。然而,这里似乎并没有专门的钩子。我需要最终的响应体作为字符串,以便将
Zend\u Controller\u Front::dispatch()
方法时,我可以在最后调用$this->\u response->sendResponse()
之前,通过添加一个监视表达式$this->getResponse()->getBody()
,以字符串的形式访问所需的输出。然而,这里似乎并没有专门的钩子。我需要最终的响应体作为字符串,以便将其发送到Prince XML以生成pdf。有人知道一种优雅的方法吗
谢谢,AdrianZend\u Controller\u Front插件挂钩如下(来自):
在routeStartup()
调用路由器以根据注册的路由评估请求之前被调用Zend\u Controller\u Front
在路由器完成请求路由后调用routeShutdown()
在dispatchLoopStartup()
进入其调度循环之前被调用Zend\u Controller\u Front
在调度程序调度操作之前被调用。此回调允许代理或筛选器行为。通过更改请求并重置其调度标志(通过preDispatch()
),可以跳过和/或替换当前操作Zend\u Controller\u request\u Abstract::setDispatched(false)
在调度程序调度操作后调用。此回调允许代理或筛选器行为。通过更改请求并重置其调度标志(通过postDispatch()
),可以为调度指定新操作Zend\u Controller\u request\u Abstract::setDispatched(false)
在Zend\u Controller\u Front退出其调度循环后调用。dispatchLoopShutdown()
dispatchLoopShutdown()
是你的钩子-这是Zend\u Controller\u Front::dispatch()
在返回或发送响应之前做的最后一件事
另一种选择是,即使它们是为完全不同的东西而设计的,也可以使用Zend_View
过滤器。这些过滤器可以添加到Zend_视图
-实例中,并在Zend_视图::render()中调用。过滤器只是一个类的实例,它提供了一个过滤器($buffer)
-方法,该方法返回过滤后的$buffer
。但是,将此接口用于与筛选ouptut无关的内容,实际上似乎不是正确的方法
我个人认为,一个dispatchLoopShutdown()
-插件将是一个不错的选择。这里有一个关于如何使用视图过滤器的示例
这是一个完美的答案,非常感谢!我向SO的无限智慧鞠躬:)注意,我们不愿意这样做,所以答案应该是寻找解决方案的终点(而不是参考文献的另一个中途停留,随着时间的推移往往会变得陈旧)。请考虑在这里添加一个独立的概要,将链接作为参考。