您的位置:首页 > 编程语言 > PHP开发

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

2015-11-09 09:40 567 查看
布局文件:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: