In app main config:
'errorHandler'=>array(
// use 'site/error' action to display errors
'errorAction'=>'site/default/error',
),
In /protected/modules/site/controllers/ I have DefaultController.php with action error:
public function actionError()
{
if($error=Yii::app()->errorHandler->error)
{
if(Yii::app()->request->isAjaxRequest)
echo $error['message'];
else
$this->render('error', $error);
}
}
But if I have error, I see it:
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)) In Yii documentation: CErrorHandler searches for the view file corresponding to a view in the following order:
1.WebRoot/themes/ThemeName/views/system: this is the system view directory under the currently active theme.
2.WebRoot/protected/views/system: this is the default system view directory for an application.
3.yii/framework/views: this is the standard system view directory provided by the Yii framework.
Why Yii not find views in yii/framework/views when using modules ?
Error handler takes as param error action not error view.
Also error message is clear, that
DefaultController
cannot find view.When using modules, place views in module directory, not in main yii view folder. In your case error view should be in
/protected/modules/site/views/default/error.php
, more generally:/protected/modules/<moduleId>/views/<controllerId>/<viewName>.php
To access root view, use
//
. From docs about view name resolvingNOTE: This applies only to controller views.