使用Gii的Yii模块代码生成问题

时间:2011-06-27 11:03:37

标签: yii

我刚刚使用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无法找到请求的视图“index”。

为了解决这个问题,我改变了模块的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

谢谢!

2 个答案:

答案 0 :(得分:3)

对不起,这是我们自己的愚蠢错误。我们的一个程序员在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);
}

答案 1 :(得分:1)

如果您不需要面包屑,只需删除该代码块即可。如果您确实需要它们,请确保您的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>
相关问题