1

我期待着

类 Default_Plugin_Test 扩展 Zend_Controller_Plugin_Abstract
{
  公共函数 preDispatch($request)
  {
        Zend_Controller_Front::getInstance()->setParam('disableOutputBuffering', true);
  }
}

还会禁用与操作关联的视图中的缓冲,但它不会。

甚至似乎不可能禁用视图中的输出缓冲,因为它是硬编码的:

抽象类 Zend_View_Abstract 实现 Zend_View_Interface
{
    /**
     * 处理视图脚本并返回输出。
     *
     * @param string $name 要处理的脚本名称。
     * @return string 脚本输出。
     */
    公共函数渲染($名称)
    {
        // 使用父私有方法查找脚本文件名
        $this->_file = $this->_script($name);
        未设置($名称);// 从本地范围中删除 $name

        ob_start();
        $this->_run($this->_file);

        返回 $this->_filter(ob_get_clean()); //过滤输出
    }
}

有没有人有类似的经历,或者有解决方案?

4

2 回答 2

3

一件事,不要这样做

视图负责显示传递给它的内容。请求由控制器/动作接收,它们确定需要做什么,写入数据库,从数据库获取等。然后他们将输出分配给视图,视图显示它。

如果您开始在视图之外显示部分页面,那么您就破坏了 MVC 模型,这正是您应该使用 Zend Framework 的原因。

你的实际问题是什么?

编辑:

不要像这样运行 CRON 作业。将它们作为独立脚本运行并实例化 Zend 框架和库以供 CRON 使用。CRON 不需要 MVC 模式即可运行、使用电子邮件或其他方式进行输出。您期望 CRON 的输出并将该输出用作确定 CRON 是否成功的有意义的方式这一事实并不是使用 CRON 的正确方法。您应该记录输出以供以后查看或通过电子邮件发送。

您可以实例化 ZF 而不是通过这样做来分派它

 $application->bootstrap();

而不是这个

 $application->bootstrap()->run();
于 2011-01-26T12:10:17.707 回答
1

这适用于 ZF 版本 1。

根据此页面,您必须在 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 中设置此选项不起作用。

于 2013-09-13T08:54:20.290 回答