我在期待
class Default_Plugin_Test extends Zend_Controller_Plugin_Abstract { public function preDispatch($request) { Zend_Controller_Front::getInstance()->setParam('disableOutputBuffering', true); } }
还会禁用与操作关联的视图中的缓冲,但事实并非如此。
即使看起来不可能在视图中禁用输出缓冲,因为它是硬编码的:
abstract class Zend_View_Abstract implements Zend_View_Interface { /** * Processes a view script and returns the output. * * @param string $name The script name to process. * @return string The script output. */ public function render($name) { // find the script file name using the parent private method $this->_file = $this->_script($name); unset($name); // remove $name from local scope ob_start(); $this->_run($this->_file); return $this->_filter(ob_get_clean()); // filter output } }
有没有人有类似的经历,或有解决方案?
答案 0 :(得分:3)
有一件事,不要这样做。
视图负责显示传递给它的内容。控制器/操作接收请求,它们确定需要完成的操作,写入数据库,从数据库获取等等。然后,它们将输出分配给视图,视图显示它。
如果你开始在视图之外显示你的页面部分,那么你打破MVC模型就是你应该使用Zend Framework的原因。
你的实际问题是什么?
修改强>
不要像这样运行CRON作业。将它们作为独立脚本运行,并实例化您的Zend框架和库以供CRON使用。 CRON不需要MVC模式来运行,使用电子邮件或其他东西来输出。您期望从CRON输出并使用该输出作为确定CRON是否成功的有意义方式的事实并不是使用CRON的正确方法。您应该记录输出以便稍后查看或通过电子邮件发送。
你可以实例化ZF而不是通过这样做来发送它
$application->bootstrap();
而不是这个
$application->bootstrap()->run();
答案 1 :(得分:1)
这适用于ZF的第1版。
根据this page,您必须在public / index.php中禁用输出缓冲(在引导调用之前和Zend_Application实例化之后):
我使用这样的东西:
$application = Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH . '/configs/application.ini'
);
if(APPLICATION_ENV !== 'production') {
$frontController = Zend_Controller_Front::getInstance();
$frontController->setParam('disableOutputBuffering', true);
}
$application->bootstrap()->run();
请注意,在application.ini中设置此选项不起作用。