Yii2基础笔记(四):深入理解布局文件

布局文件:
views/layouts/main.php 主要包括页面显示的头部(导航栏),尾部(footer)

一、自定义布局文件的使用:
① 在controller的action中添加:

$this->layout = '指定的布局文件';//不需要加php后缀名
不同的action可以指定各自的布局文件。

② 让所有的action使用同一个布局文件:
在controller中直接添加属性:

public $layout = '统一的布局文件’;//不需要加php后缀名

或 在controller初始化方法中定义:

public function init(){
     parent::init();
     $this->layout  ='main';
}

③ 不定义,则使用默认布局文件:
  查找顺序如下:
    先查看当前Controller中是否定义布局变量;
    如果有就直接使用,否则会查找其所在Module模型中定义的布局变量;
    如果还没有,会查找改module的父类Module中定义的布局变量;

④ layout变量的空值:
    a. false,不使用布局文件;
    b. null,使用当前module模块中的布局文件;

⑤ layout变量的值:与查找view文件类似
    a.‘main’ //直接用字符串,表示当前module的布局文件
    b. @app/views/layouts/main.php //别名
    c.‘/main’ //加斜杠表示当前app下的布局文件

注意,布局文件可以层层嵌套,比如当前有个test.php的布局文件
里面写法是:

    <?php $this->beginContent('@app/views/layouts/main.php',['需要传递的变量' => 变量值]);?>
      <div>......</div>
      <?php echo $content ?>

    <?php $this->endContent(); ?>

其工作过程是:view文件render过来产生的content变量,先在这个test.php中渲染,
渲染的结果又作为一个新的content在当前app下的main.php布局文件中渲染;

二、布局的更高级用法:
yii2默认只能在布局文件中接收一个名称为$content的变量,这个变量是render指定的view文件产生的;
现在可以通过在view文件中写以下代码传递多个变量给布局文件渲染:

    <?php $this->blocks['content'] = ''; $this->blocks['other'] = ''; ?>

    <?php InhritLayout::begin(['viewFile' => '@app/views/layouts/main.php']); ?>    
        <?php $this->beginBlock('contetn');?>
                这里是指定的content需要传递的变量
        <?php $this->endBlock(); ?>

        <?php $this->beginBlock('other');?>
                这里是额外要在布局文件中渲染的东西
        <?php $this->endBlock(); ?> 
    <?php InhritLayout::end(); ?>

最后在布局文件中,获取。
详细参考:
http://github.com/yiifans/lulucms/blob/master/components/widgets/InhriLayout.php

你可能感兴趣的:(yii,布局)