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

bn31dyow  于 2022-11-09  发布在  其他
关注(0)|答案(2)|浏览(124)

我刚刚使用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
谢谢你!

sh7euo9m

sh7euo9m1#

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

rmbxnbpk2#

如果你不需要面包屑,只需删除该代码块。如果你确实需要它们,确保你的Controller.php(它扩展了CController.php)类具有:

public $breadcrumbs=array();

那么它应该会像预期的那样工作。
我不知道你为什么会遇到URL/路径问题,但是检查一下config/main.php中的URL管理器,看看是否有规则导致了问题。似乎没有规则的情况下我也能工作,但是如果你有规则的话,试着把这个放在rules数组的第一位:

'gig'=>'gig',
'gig/<controller:\w+>'=>'gig/<controller>',
'gig/<controller:\w+>/<action:\w+>'=>'gig/<controller>/<action>

相关问题