Вывод ошибки в другом модуле

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Вывод ошибки в другом модуле

Сообщение SiZE »

Есть файл protected/modules/backend/components/BackendController.php в нем я задаю общие настройки для контроллеров бакэнда

Код: Выделить всё

class BackendController extends CController {
    public function init(){
        Yii::app()->setComponents( array(
            'errorHandler' => array(
                'class' => 'CErrorHandler',
                'errorAction' => 'backend/default/error',
            ),
        ), false );
    }
}
 
Скажем пользователь открыл в браузере страницу со следующим путем protected/modules/test/controllers/backend/DefaultController.php

Код: Выделить всё

class DefaultController extends BackendController {
    public function actionTest(){
        throw new CHttpException(404,'test');
    }
}
 
Так вот ошибка нормально выводится если указана дефолтная страница

Код: Выделить всё

'errorAction' => 'site/error' 
А если указано

Код: Выделить всё

'errorAction' => 'backend/default/error' 
то возвращает
CHttpException

Системе не удалось найти запрашиваемое действие "error". (D:\home\work\yii-1.1.14\web\CController.php:483)

#0 D:\home\work\yii-1.1.14\web\CController.php(270): CController->missingAction('error')
#1 D:\home\work\yii-1.1.14\web\CWebApplication.php(282): CController->run('error')
#2 D:\home\work\yii-1.1.14\base\CErrorHandler.php(331): CWebApplication->runController('/backend/defaul...')
#3 D:\home\work\yii-1.1.14\base\CErrorHandler.php(204): CErrorHandler->render('error', Array)
#4 D:\home\work\yii-1.1.14\base\CErrorHandler.php(129): CErrorHandler->handleException(Object(CHttpException))
#5 D:\home\work\yii-1.1.14\base\CApplication.php(732): CErrorHandler->handle(Object(CExceptionEvent))
#6 [internal function]: CApplication->handleException(Object(CHttpException))
#7 {main}
P.S. Если в браузере открыть /backend/default/error то страница открывается. Проблема в runController который не может распознать модуль в маршруте к странице? Как это реализовать вопшем? :)
Последний раз редактировалось SiZE 2014.03.03, 08:27, всего редактировалось 1 раз.
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Вывод ошибки в другом модуле

Сообщение SiZE »

Я пока решил так.
Создал класс экшена protected/modules/backend/controllers/default/ErrorAction.php
Подправил BackendController.php следующим образом

Код: Выделить всё

    public function init(){
        Yii::app()->setComponents( array(
            'errorHandler' => array(
                'class' => 'CErrorHandler',
                'errorAction' => $this->getId().'/error',
            ),
        ), false );
    }

    public function actions(){
        return array(
            'error' => array(
                'class' => 'application.modules.backend.controllers.default.ErrorAction',
            ),
        );
    }
 
:( Теперь при наследовании не забыть в случае необходимости смерджить массив возвращаемый actions...
Аватара пользователя
twix
Сообщения: 86
Зарегистрирован: 2011.12.12, 18:25

Re: Вывод ошибки в другом модуле

Сообщение twix »

У меня тоже так:

Код: Выделить всё

                Yii::app()->setComponents(array(
                    'errorHandler'=>array(
                            // use 'site/error' action to display errors
                            'errorAction'=>'admin/default/error',
                    ),
 
и все работает. Проверьте роуты, в них проблема.
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Вывод ошибки в другом модуле

Сообщение SiZE »

twix писал(а):и все работает. Проверьте роуты, в них проблема.
Я их отключал, включал в менеджере, писал и так и этак.
Аватара пользователя
twix
Сообщения: 86
Зарегистрирован: 2011.12.12, 18:25

Re: Вывод ошибки в другом модуле

Сообщение twix »

У меня такие роуты:

Код: Выделить всё

     // admin module
     'admin'=>'admin/default/index',
     'admin/<controller:\w+>'=>'admin/<controller>/index',
     'admin/<controller:\w+>/<id:\d+>'=>'admin/<controller>/view',
     'admin/<controller:\w+>/<action:\w+>'=>'admin/<controller>/<action>',
     'admin/<controller:\w+>/<action:\w+>/<id:\d+>'=>'admin/<controller>/<action>',
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Вывод ошибки в другом модуле

Сообщение SiZE »

twix писал(а):У меня такие роуты:
Спасибо, перепроверю еще раз.
Ответить