2013-07-04 31 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的文档:

1.WebRoot /主题: 对应于一个视图以下列顺序视图文件CErrorHandler搜索/ 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

我知道它,它的工作原理。但我很感兴趣为什么我的问题(yii/framework/views)中的项目3在使用模块时不起作用? –

+0

要访问基本文件夹中的视图,无论是否在模块中,请使用双斜杠启动名称'/ / – 2013-07-04 10:50:32

相关问题