2

在我的 Yii 应用程序中,我有一个名为 admin 的模块,因此模块类是 AdminModule,它扩展了 CWebModule 类并位于 AdminModule.php 文件中。根据文档,CWebModule 有一个layout在所有模块控制器之间共享的属性,以防控制器本身没有定义任何布局。

我的控制器没有定义任何布局,在 AdminModule.php 我把这个:

$this->layout='webroot.themes.bootstrap.views.layouts.column2';
$this->layoutPath = Yii::getPathOfAlias('webroot.themes.bootstrap.views.layouts');

但是,我在管理模块中的控制器仍在使用其他一些布局,我认为它是在组件目录中的 Controller.php 中定义的。这是为什么?如何为特定模块设置共享布局?

4

5 回答 5

5

解决方案是稍微更改我的代码,如下所示:

$this->layoutPath = Yii::getPathOfAlias('webroot.themes.bootstrap.views.layouts');
$this->layout = 'column2';

与指定的路径一样,我不需要为布局指定整个路径别名。我在我的 AdminModule.php 的 init() 函数中有这些行,它工作正常。

于 2013-08-02T16:34:54.750 回答
1

尝试设置布局路径如下图

$this->layout="webroot/themes/bootstrap/views/layouts/column2";
于 2013-08-02T13:32:34.693 回答
0

The solution is set the layout on beforeControllerAction in your module. It should work. I've answer the similar question, please refer to it Yii module layout

于 2013-08-02T13:31:04.207 回答
0

如果同时使用 Module 和 Theme(如 bootstrap),则表示 Yii 会首先在 Theme 文件夹中找到视图文件(包括布局文件,一个特殊的视图文件),CController 中有一个重要的函数 resolveViewFile,你可以添加调试点来观察它是如何工作的,下面是我的解决方案:

1. 我有一个名为“admin”的模块。

2.在AdminModule的init函数中,添加:

$this->layout = 'column2';

3. 删除模块的所有视图文件到主题文件夹

于 2014-04-14T16:55:01.387 回答
0

您可以将以下代码放入您的控制器中。

public function init()
{
    Yii::$app->setLayoutPath($this->module->getBasePath().'/views/layout');
}

或者您可以将以下代码放入您的模块引导类中

public function init()
{
    parent::init();

    Yii::$app->setLayoutPath($this->getBasePath().'/views/layout');
}
于 2016-09-25T06:21:45.720 回答