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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值