Очень рад открытию русскоязычной ветки на официальном форуме Yii!
По ходу столкнулся с небольшим неудобством при перехвате ошибок.Допустим, мы хотим получить запись с несуществующим id в таблице.После, если ее действительно нет, бросаем эксепшн
throw new CHttpException(XXX, 'Ой, записи не найдено!')
Все дело в том, что Yii просто полностью рендерит файлик в protected/views/system/errorXXX.php и отдает ответ.
Вопрос - можно ли при возникновении подобных эксепшенов вызывать контроллер, скажем ErrorController и его действие actionerrorXXX()?
Придется наследовать свой класс от CHttpException и там уже перегружать конструктор с вызовом этого контроллера?
Вопрос хороший… Принципиальное решение такое. Тут не контроллер нужен, а надо наследовать свой класс от http://www.yiiframew…/CErrorHandler, зарегистрировать его в конфиге приложения (для этого надо написать что-то типа ‘errorHandler’ => array(
'class' => 'path.to.class',
…
)
Вот только ID компонента обраотки ошибок я не знаю, может там и не errorHandler. Тут или по фреймворку лазить, или на форуме английском спрашивать.
А в своем классе обработки ошибок ты должен создавать тот контроллер. который хочешь (чтоб он был доступен, надо его сначала импортировать: Yii:import()) И потом вызвать нужное действие.
А вообще, для случаев типа “не найдено” лучше че-то попроще придумать
Но если будешь реализовывать через наследование стандартного обработчика - напиши как сделал, очень интересно.
Если с английским неважно - я могу спросить на англ форуме, но завтра, щас уже спать надо
Вопрос хороший... Принципиальное решение такое. Тут не контроллер нужен, а надо наследовать свой класс от http://www.yiiframew.../CErrorHandler, зарегистрировать его в конфиге приложения (для этого надо написать что-то типа 'errorHandler' => array(
'class' => 'path.to.class',
…
)
Вот только ID компонента обраотки ошибок я не знаю, может там и не errorHandler. Тут или по фреймворку лазить, или на форуме английском спрашивать.
А в своем классе обработки ошибок ты должен создавать тот контроллер. который хочешь (чтоб он был доступен, надо его сначала импортировать: Yii:import()) И потом вызвать нужное действие.
А вообще, для случаев типа “не найдено” лучше че-то попроще придумать
Но если будешь реализовывать через наследование стандартного обработчика - напиши как сделал, очень интересно.
Если с английским неважно - я могу спросить на англ форуме, но завтра, щас уже спать надо
Ага, надо попробовать оба варианта, спасибо на наводку. Чуть позже отпишусь
My english is quite normal, so thank you for help - I'll ask those guys myself if needed.
Но возник другой вопрос. Да при возникновении ошибки функция вызывается и выводится сообщение ‘action’. Но при этом страница отдаётся с заголовком ‘404 CHttpException’ и становится “красной” в firebug-е. Могу я при возникновении ошибки выдать обычную страницу (без заголовков с ошибками)?