为什么Yii模块找不到系统视图?

时间:2013-07-04 09:51:11

标签: php yii

在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中找到视图?

1 个答案:

答案 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来搜索本地化文件(如果有)。

注意:这仅适用于控制器视图。