在app主配置中:
'errorHandler'=>array(
// use 'site/error' action to display errors
'errorAction'=>'site/default/error',
),
在/ protected / modules / site / controllers /我有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中找到视图?
答案 0 :(得分:1)
错误处理程序视为参数错误操作而不是错误视图。
同样显示错误消息,DefaultController
无法找到视图。
使用模块时,请将视图放在模块目录中,而不是放在主yii视图文件夹中。在您的情况下,错误视图应位于/protected/modules/site/views/default/error.php
,更常见的是:/protected/modules/<moduleId>/views/<controllerId>/<viewName>.php
要访问根视图,请使用//
。来自docs about view name resolving
根据名称查找视图文件。 视图名称可以采用以下格式之一:
- 模块中的绝对视图:视图名称以单斜杠“/”开头。 在这种情况下,将在当前活动模块的视图路径下搜索视图。 如果没有活动模块,将在应用程序的视图路径下搜索视图。
- 应用程序中的绝对视图:视图名称以双斜杠“//”开头。 在这种情况下,将在应用程序的视图路径下搜索视图。 从1.1.3版本开始,此语法已可用。
- 别名视图:视图名称包含点并引用路径别名。 视图文件是通过调用YiiBase::getPathOfAlias()确定的。请注意别名视图 不能是主题,因为他们可以引用位于任意位置的视图文件。
- 相对观点:否则。将在当前活动状态下搜索相对视图 控制器的视图路径。
对于绝对视图和相对视图,相应的视图文件是PHP文件 其名称与视图名称相同。该文件位于指定的目录下。 此方法将调用CApplication::findLocalizedFile来搜索本地化文件(如果有)。
注意:这仅适用于控制器视图。