在yii中,我创建了一个名为"admin"的模块,我想将模块设置为使用我自定义的布局,而不是我搜索一些帖子 defalult.so,它奏效了!
这是我读到的帖子:
http://www.yiiframework.com/forum/index.php/topic/24767-module-layout/
将我的应用程序配置为帖子后,我的应用程序运行良好,但现在我有一些问题:
- 布局路径
帖子说配置$this->layoutPath = Yii::getPathOfAlias('administration.views.layouts');
layoutPah 变量让我非常困惑,似乎这个 var 没有定义 class.so 为什么它可以被$this
调用? /layouts/main
/layouts/main
和//layouts/main
有什么区别使用//layouts/main
时它不起作用,应用程序仍然调用默认主布局不是我的?- 覆盖
该帖子还表示,控制器中的public $layout='//layouts/column1';
覆盖了在init()
方法中为模块控制器设置的值。这是真的吗?
-
布局路径
布局路径的定义CWebApplication
在 wiki 中查看详细信息因此,您可以使用以下内容来访问它:Yii::app()->layoutPath= Yii::getPathOfAlias('administration.views.layouts');
-
回答者 彼得·
-
覆盖请参阅主计长布局属性的说明:
要应用于此控制器视图的布局的名称。默认值为 null,表示使用应用程序布局。如果为 false,则不会应用任何布局。如果控制器属于模块并且此布局属性为 null,则将使用模块布局。
因此,您需要将其设置为 null,然后将使用模块布局。注意:在控制器的任何操作中,您可以将布局设置为 null $this->layout=null;
这样布局仅在此操作中为空,而在其他操作中不为空!
您可以将以下代码放入控制器中。
public function init()
{
Yii::$app->setLayoutPath($this->module->getBasePath().'/views/layout');
}
或者您可以将以下代码放在模块引导类中
/**
* @inheritdoc
*/
public function init()
{
parent::init();
Yii::$app->setLayoutPath($this->getBasePath().'/views/layout');
}