2013-07-04 4 views
1

В приложении основной конфигурации:Почему модуль Yii не находит системные представления?

'errorHandler'=>array(
    // use 'site/error' action to display errors 
    'errorAction'=>'site/default/error', 
), 

В/защищенных/модулей/сайта/контроллеры/У меня есть DefaultController.php с ошибкой действия:

public function actionError() 
{ 
    if($error=Yii::app()->errorHandler->error) 
    { 
     if(Yii::app()->request->isAjaxRequest) 
      echo $error['message']; 
     else 
      $this->render('error', $error); 
    } 
} 

Но если у меня есть ошибка, я вижу это:

 
DefaultController cannot find the requested view "error". (/home/web/framework/web/CController.php:897)

0 /home/web/framework/web/CController.php(800): CController->renderPartial('error', Array, true) 1 /home/web/apps/myapp/protected/modules/site/controllers/SiteController.php(67): CController->render('error', Array) 2 /home/web/framework/web/actions/CInlineAction.php(50): SiteController->actionError() 3 /home/web/framework/web/CController.php(309): CInlineAction->runWithParams(Array) 4 /home/web/framework/web/CController.php(287): CController->runAction(Object(CInlineAction)) 5 /home/web/framework/web/CController.php(266): CController->runActionWithFilters(Object(CInlineAction), Array) 6 /home/web/framework/web/CWebApplication.php(283): CController->run('error') 7 /home/web/framework/base/CErrorHandler.php(332): CWebApplication->runController('site/site/error') 8 /home/web/framework/base/CErrorHandler.php(205): CErrorHandler->render('error', Array) 9 /home/web/framework/base/CErrorHandler.php(130): CErrorHandler->handleException(Object(CHttpException)) 10 /home/web/framework/base/CApplication.php(713): CErrorHandler->handle(Object(CExceptionEvent)) 11 [internal function]: CApplication->handleException(Object(CHttpException))

в Yii документации: поиск CErrorHandler для просмотра файла, соответствующего представлению в следующем порядке:

1.WebRoot/темы/ThemeName/views/system: это каталог системного представления под текущей активной темой.

2.WebRoot/protected/views/system: это системный каталог по умолчанию для приложения.

3.yii/framework/views: это стандартный системный каталог, предоставляемый инфраструктурой Yii.

Почему Yii не находит виды в yii/framework/views при использовании модулей?

ответ

1

Ошибка обработчик принимает как ошибку параметра Действие не ошибка вид.

Также сообщение об ошибке ясно, что DefaultController не удалось найти.

При использовании модулей размещайте представления в каталоге модуля, а не в главной папке просмотра yii. В вашем случае вид ошибки должен быть в /protected/modules/site/views/default/error.php, в более общем смысле: /protected/modules/<moduleId>/views/<controllerId>/<viewName>.php

Чтобы получить доступ к корневому представлению, используйте //. От docs about view name resolving

Finds a view file based on its name. The view name can be in one of the following formats:

  • absolute view within a module: the view name starts with a single slash '/'. In this case, the view will be searched for under the currently active module's view path. If there is no active module, the view will be searched for under the application's view path.
  • absolute view within the application: the view name starts with double slashes '//'. In this case, the view will be searched for under the application's view path. This syntax has been available since version 1.1.3.
  • aliased view: the view name contains dots and refers to a path alias. The view file is determined by calling YiiBase::getPathOfAlias() . Note that aliased views cannot be themed because they can refer to a view file located at arbitrary places.
  • relative view: otherwise. Relative views will be searched for under the currently active controller's view path.

For absolute view and relative view, the corresponding view file is a PHP file whose name is the same as the view name. The file is located under a specified directory. This method will call CApplication::findLocalizedFile to search for a localized file, if any.

ПРИМЕЧАНИЕ: Это относится только к контроллер представления.

+0

Я знаю это, и он работает. Но мне интересно, почему элемент 3 в моем вопросе (yii/framework/views) не работает при использовании модуля? –

+0

Чтобы получить доступ к представлению в базовой папке независимо от того, находится ли он в модуле или нет, введите имя с двойной косой чертой '//' –

Смежные вопросы