我刚刚使用Gii生成了一个名为gig的新模块。用Gii生成模块代码后,我更新了config / main.php文件,使其包含“ gig”模块,如下所示:
'import'=>array(
'application.models.*',
'application.components.*',
'application.modules.*',
),
'modules'=>array(
// uncomment the following to enable the Gii tool
'gii'=>array(
'class'=>'system.gii.GiiModule',
'password'=>'secretpassword',
),
'gig',
),
现在,当我尝试按以下方式在浏览器中访问自动生成的Yii模块代码时:
http://localhost/gig/default/index/
我收到以下错误:
DefaultController找不到请求的视图“索引”。
为了解决此问题,我从此更改了模块的DefaultController.php中的呈现代码:
$this->render('index');
至此:
$this->render('gig.views.default.index');
此更改解决了问题,但是我想知道我是否错过了什么,或者Gii是否为模块生成错误代码?有人遇到过这个问题吗?我的解决方案正确吗?
现在控制器可以找到视图,我重新加载了页面,仅显示此错误消息:
试图获取非对象的属性
结果发现index.php视图文件中的以下代码有问题:
$this->breadcrumbs=array(
$this->module->id,
);
我不确定为什么会这样。我尝试将上面的代码更改为以下内容:
$this->breadcrumbs=array(
Yii::app()->controller->module->id,
);
但是这仍然给我相同的错误消息,“试图获取非对象的属性”。
任何想法可能有什么问题吗?设置模块代码时我缺少什么吗?我正在使用Yii 1.1.7
谢谢!
[抱歉,这是我们自己的愚蠢错误。我们的一位程序员在Controller类中添加了__construct方法,却忘记在该方法中包含$ module变量,如下所示:
public function __construct($id='site')
{
parent::__construct($id);
//custom code here
}
添加如下所示的$ module变量后,现在一切正常。
public function __construct($id='site', $module = null)
{
parent::__construct($id, $module);
}
如果不需要面包屑,只需删除该代码块。如果确实需要它们,请确保您的Controller.php(扩展了CController.php)类具有:
public $breadcrumbs=array();
然后它将按预期工作。
我不确定您为什么会遇到URL /路径问题,但是请在config / main.php中检查URL管理器,以查看是否存在引起问题的规则。似乎没有任何规则对我有用,但是如果您有一些规则,请尝试将其放在规则数组中:
'gig'=>'gig',
'gig/<controller:\w+>'=>'gig/<controller>',
'gig/<controller:\w+>/<action:\w+>'=>'gig/<controller>/<action>