【问题标题】:How to discard already rendered views in Yii如何在 Yii 中丢弃已经渲染的视图
【发布时间】:2014-07-01 19:05:51
【问题描述】:

我有一个错误处理函数,它是这样绑定的:

Yii::app()->attachEventHandler('onError',array($this,'handleError'));
Yii::app()->attachEventHandler('onException',array($this,'handleError'));

现在这个函数渲染一个带有错误描述的视图:

public function handleError(CEvent $event) {
    // simplified
    $event->handled = true;
    $this->render("/main/error");
}

但是,通常部分视图已经呈现,这并没有丢弃它 - 实际上,它会将错误视图呈现到旧视图中,这会导致 HTML 和布局损坏。

有没有办法丢弃已经渲染的内容,并继续清理页面?

我试过ob_end_clean(),但没有任何区别。

【问题讨论】:

    标签: php yii error-handling


    【解决方案1】:

    去死吧,愚蠢的 Yii。

    不会冒另一个风滚草的风险。

    诀窍是使用

    while (@ob_end_clean()) {}
    

    因为显然使用了多个缓冲区。

    【讨论】:

      【解决方案2】:

      如果我理解你,我有一个想法:

      在您的处理程序所属的类中创建私有变量,例如:

      private $_errorCaught = false;
      

      并在您的处理程序中添加检查:

      public function handleError(CEvent $event) {
          // simplified
          $event->handled = true;
          // if we didn't get any error
          if(!$this->_errorCaugth)
          {
              $this->_errorCaught = true;
              $this->render("/main/error");
          }
          else
              $this->renderPartial("/main/error");
      }
      

      另一种变体:重定向到错误页面。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-21
        • 1970-01-01
        • 1970-01-01
        • 2015-02-25
        • 1970-01-01
        • 2018-10-25
        相关资源
        最近更新 更多