如何在Yii中丢弃已渲染的视图

时间:2014-07-01 19:05:52

标签: php yii error-handling

我有一个错误处理函数,它绑定如下:

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(),但它没有任何区别。

2 个答案:

答案 0 :(得分:0)

拧它,愚蠢的Yii。

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

诀窍是使用

while (@ob_end_clean()) {}

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

答案 1 :(得分:0)

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

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

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");
}

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