我有一个错误处理函数,它绑定如下:
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()
,但它没有任何区别。
答案 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");
}
另一种变体:重定向到错误页面。