应用程序内主配置:
'errorHandler'=>array(
// use 'site/error' action to display errors
'errorAction'=>'site/default/error',
),
在/protected/modules/site/controllers/I中,有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/themes/ThemeName/views/system:这是当前活动主题下的系统视图目录。
2.WebRoot/protected/views/system:这是应用程序的默认系统视图目录。
3.yii/framework/views:这是yii框架提供的标准系统视图目录。
为什么Yii在使用模块时无法在Yii/framework/views中找到视图?
错误处理程序将Error操作作为参数,而不是Errorview。
此外,错误消息也很清楚,即DefaultController
找不到视图。
使用模块时,请将视图放在模块目录中,而不是主yii视图文件夹中。在您的情况下,错误视图应该在/protected/modules/site/views/default/error.php
中,更一般地说:/protected/modules/<moduleId>/views/<controllerId>/<viewName>.php
要访问根视图,请使用//
。从有关视图名称解析的文档
根据视图文件的名称查找视图文件。视图名称可以采用以下格式之一:
- 模块中的绝对视图:视图名称以单斜杠"/"开头。在这种情况下,将在当前活动模块的视图路径下搜索视图。如果没有活动模块,将在应用程序的视图路径下搜索该视图
- 应用程序中的绝对视图:视图名称以双斜杠"//"开头。在这种情况下,将在应用程序的视图路径下搜索该视图。此语法从1.1.3版本开始提供
- 别名视图:视图名称包含点并引用路径别名。视图文件是通过调用YiiBase::getPathOfAlias()来确定的。请注意,别名视图无法设置主题,因为它们可以引用位于任意位置的视图文件
- 相对视图:否则。将在当前活动的下搜索相对视图控制器的视图路径
对于绝对视图和相对视图,对应的视图文件是PHP文件其名称与视图名称相同。该文件位于指定的目录下。此方法将调用CApplication::findLocalizedFile来搜索本地化文件(如果有的话)。
注意:这仅适用于控制器视图。