1.配置布局变量:
1.1Controller里面定义布局变量
1.直接加一个公有变量public $layout = '路径'。(默认是当前控制器目录下的views目录下的 layouts文件夹)
如果只想在某个action中改变布局,那么变量就设置在action中
2.或者通过控制器的inint()方法设置该变量
1.2Mudule(模块)中定义布局变量。直接在其(如:AdminModule.php)init()方法里面定义$layout变量的值
如何写layout变量的值:
其有三种:1.false:不使用布局文件($layout=false;)
2.null,使用Module中定义的布局文件
3.自负串:制定布局文件。其字符串的形式如下:
3.1、别名开头,制定布局文件路径(public $layout='@app/Module/admin/views/ayouts/main')
3.2、/开头,指定app下面的views里面的layouts文件夹下的布局文件(public $layout='/main')
3.3、直接使用布局文件的名字如:'main',则表示使用Module下的布局文件(public $layout='main')
此三种路径写法的源码如下:
if (strncmp($layout, '@', 1) === 0) {
$file = Yii::getAlias($layout);
} elseif (strncmp($layout, '/', 1) === 0) {
//echo Yii::$app->getLayoutPath() . DIRECTORY_SEPARATOR;exit();
$file = Yii::$app->getLayoutPath() . DIRECTORY_SEPARATOR . substr($layout, 1);
} else {
$file = $module->getLayoutPath() . DIRECTORY_SEPARATOR . $layout;
}
2.查找布局文件的原理:
2.1、先看当前controller里面有没有定义布局文件
2.2、如果没有,查找所在Module里面有没有定义布局文件
2.3、查找父级Module里面有没有定义布局文件
3.布局文件的嵌套使用
有时候你想嵌套一个布局到另一个,例如,在Web站点不同地方,想使用不同的布局, 同时这些布局共享相同的生成全局HTML5页面结构的基本布局,可以在子布局中调用 yii\base\View::beginContent() 和yii\base\View::endContent() 方法,如下所示:
在views布局文件里面的使用如下:
<?php $this->beginContent('@app/views/layouts/main.php');?>//必须加.php
<?php echo $content;?>
<?php $this->endContent();?>
如上所示,子布局内容应在 yii\base\View::beginContent() 和 yii\base\View::endContent() 方法之间,传给 yii\base\View::beginContent() 的参数指定父布局,父布局可为布局文件或别名。
使用以上方式可多层嵌套布局。