yii框架之layout布局文件

PHP 2017-07-25

配置布局变量 $layout

  1. 在Controller控制器里定义布局变量
    直接添加一个公有变量:public $layout = '布局文件路径'(默认起始路径是控制器所在目录下的views目录下的layouts文件夹)
    举个栗子:public $layout = loginlayout
    举个栗子
    在LoginController控制器里头写了一个公共的布局变量,它的值为loginlayout
    那么它指向的路径就是:views/layouts/loginlayout.php
  1. 如果是想在action里改变布局,那么就把变量写在里面
public function actionIndex(){
    $this->layout = 'loginlayout';
}
  1. 通过控制器的init()方法去定义该变量
public function init(){
    $this->layout = 'loginlayout';
    parent::init(); // TODO: Change the autogenerated stub
}
  1. 同样也可以通过模块(Module)的init方法去定义$layout布局文件
    不过这几种方法是有区别的。因为层次关系会由内到外去找布局文件,所以优先级是:2 > 3 > 1 > 4

layout变量的值

  • $layout = false;
    这种代表的是不使用布局文件
  • $layout = null;
    这种代表的是使用模块里定义的布局文件
  • $layout = 'string';
    该字符串代表的是一个布局文件路径
    可以使用别名开头@app/Module/admin/views/layouts/loginlayout
    使用/开头则是指定app下面的views里面的layouts文件夹下的布局文件
    直接使用布局文件的名字如:$layout = loginlayout,则表示使用Module下的布局文件

此三种路径写法的源码如下:

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;  
}  

查找布局文件的原理

  • 先看当前controller里面有没有定义布局文件
  • 如果没有,查找所在Module里面有没有定义布局文件
  • 查找父级Module里面有没有定义布局文件

布局文件的嵌套使用

<?php $this->beginContent('@app/views/layouts/main.php');?>//必须加.php  
<?php echo $content;?>  
<?php $this->endContent();?>  

原文地址:http://blog.csdn.net/lx_96/article/details/52122168


本文由 阿涛 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

还不快抢沙发

添加新评论