#php #yii #error-handling
#php #yii #обработка ошибок
Вопрос:
У меня есть функция обработки ошибок, которая привязана следующим образом:
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()
, но это не имело никакого значения.
Ответ №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");
}
Другой вариант: перенаправление на страницу ошибки.