[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Yii — разные обработчики ошибок/исключений
AlmazDelDiablo
И еще раз всем здравствуйте!

Вот пару дней назад взялся ковырять фреймворк Yii, посему знания в нем очень малы и отрывисты.
Сейчас понадобилось сделать так, чтобы при использовании экшена для обработки ошибок/исключений, параллельно для одной (404-й) ошибки выводить специальный файл представления вне макета по умолчанию.

Кто-нибудь в курсе, как это делается? И есть ли встроенные в Yii механизмы для этого дела?

upd:
Если изменить в CErrorHandler`e метод render(), то всё работает, но, помоему, это некрасиво — лезть в код фреймворка...
if( $data['code'] == 404 ) {
include($this->getViewFile($view,$data['code']));
} else {
Yii::app()->runController($this->errorAction);
}


_____________
Блог | VK | GitHub | Twitch
AlmazDelDiablo
В общем, в ходе изысканий и при помощи пары советов с форума Yii, появилось такое решение: обработка ошибок вынесена в отдельный контроллер, который имеет отдельные методы для уникальный ошибок и один для всех остальных. Вот код для тех, кто столкнется в такой же проблемой:
<?php
/**
* Обработчик ошибок.
*/

class ErrorsController extends CController
{
private $_error;

public function action404() {
$this->layout = false;
$this->render('error404');
}

public function actionIndex() {
if( Yii::app()->errorHandler->getError() !== null ) {
$this->_error = Yii::app()->errorHandler->getError();

if( $this->_error['code'] == 404 ) {
$this->action404();
return;
}

$this->render( 'error', array( 'error' => $this->_error ) );
} else {
$this->redirect( Yii::app()->request->getBaseUrl(true) );
}
}
}


_____________
Блог | VK | GitHub | Twitch
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.