Yii:(嵌套)子模块的布局

时间:2012-08-29 14:30:18

标签: layout module yii

我在Yii中设置了一个嵌套模块结构,由于某种原因,子模块似乎根本没有使用任何布局。

这是我的路径heirachy。

app
    protected
        modules
            parent
                views
                    layouts
                        column1.php
                        column2.php
                        main.php
                modules
                    child

我在配置文件中添加了模块,如下所示

'modules'=>array(
    'parent'=>array(
        'modules'=>array(
            'child',
        ),
    ),
),

两个模块都起作用,但在子模块中,我得到的是解释默认/索引控制器的消息可以在以下路径中自定义。没有显示布局内容。

根据文档,我希望子模块从父级继承布局。

我确实使用gii(不会创建子模块)生成子模块,因此我将其创建为典型模块,在父项中添加了一个模块文件夹,并将结果作为子项复制到我的父模块中。

任何想法在哪里看?

1 个答案:

答案 0 :(得分:0)

事实证明问题在于Yii中的视图解析方案。我的父模块将默认布局设置为'column1',它由我的子模块继承。在'column1'布局中,'main'布局使用以下代码呈现。

$this->beginContent('/layouts/main');

在Yii的视图分辨率方案中,它映射到当前模块的layouts文件夹。对于我父模块中的视图,这将映射到父视图文件夹中的主布局,并且工作正常。

/protected/modules/parent/views/layouts/main.php

对于我的子模块中的视图,这将映射到子视图文件夹中的主要布局,该布局不存在,并且解析失败。

/protected/modules/parent/modules/child/views/layouts/main.php

在Yii论坛here上提供的解决方法是修改父模块中的“column1”和“column2”布局,以使用半固定的路径。

$this->beginContent('//../modules/parent/views/layouts/main')