ThinkPHP5.0之视图和模板
- 加载视图
// 显示模板
return $this->fetch();
// 或者使用助手函数
return view('index');
注意:
1、默认不写参数,则加载默认当前模块/默认视图目录/当前控制器(小写)/当前操作(小写).html
如当前在admin模块/Index控制器/index方法,则默认加载admin/view/Index/index.html
2、若当前在admin模块/Index控制器/getIndex方法,则默认的模板文件名规则改为实际操作方法名的小写+下划线写法
如:admin/view/Index/get_index.html
- 分配数据到模板
// 显示模板并分配数据
$this->fetch("index",['age' => $age]);
// 或者使用助手函数
return view("index", ['age' => $age]);
// 或者
$this->assign('赋值变量名','值');
$this->assign('name', $name);
- 模板引擎
ThinkPHP内置了一个基于XML的性能卓越的模板引擎,这是一个专门为ThinkPHP服务的内置模板引擎,使用了 XML标签库技术的编译型模板引擎。
- 模板继承
// 在模块的视图目录下,新建一个存放模板的目录Layout,新建一个公共模板文件base.html,用于模板继承
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>{block name="title"}标题{/block}</title>
</head>
<body>
{block name="content"}内容{/block}
</body>
</html>
// 在子模板中继承父模板
{extend name="base" /}
{block name="title"}子模板标题{/block}
{block name="content"}
子模板主体内容
{/block}
- 模板引擎语法
// 使用变量
// 在控制器中分配数据加载到模板中
$this->fetch("index", ['username' => "用户名"]);
{$username}
// 使用函数
// 在控制器中分配数据加载到模板中
$this->fetch("index", ['time' => time()]);
{$time}
// 分配变量并使用函数
$this->fetch("index", ['data' => 'abc']);
{$data|md5|substr=0,10}
// 使用默认值
{$data|default='你好'}
// 使用运算符
{$data['score']+10}
// 使用三元运算符
{$varname.aa ?? 'xxx'}
等价于
<?php echo isset($varname['aa']) ? $varname['aa'] : '默认值'; ?>
{$varname?='xxx'}
等价于
<?php if(!empty($name)) echo 'xxx'; ?>
// 原样输出
// 可以使用 literal 标签来防止模板标签被解析
// 可能和内置模板引擎的解析规则冲突的地方都可以使用 literal 标签 处理。
{literal}
Hello,{$name}!
{/literal}
// 模板注释
// 单行注释
{/* 注释内容 */ } 或 {// 注释内容 }
注意: { 和注释标记之间不能有空格。
// 多行注释
{/* 这是模板 注释内容*/ }
// 引入子视图
{include file="Layout/header" /}
- 内置标签
// volist标签
查询数据集(select方法)的结果输出,通常模型的select方法返回的结果是一个二维数组,可以直接使用volist标签进行输出
$list = User::all();
$this->assign('list',$list);
// 模板中循环输出
// name属性表示模板赋值的变量名称,id表示当前的循环变量
{volist name='list' id='vo'}
{$vo.id}:{$vo.name}
{/volist}
// 输出查询结果中的部分数据,如输出其中第5-15条记录
{volist name="list" id="vo" offset="5" length='10'}
{$vo.name}
{/volist}
// foreach标签
// foreach标签类似与volist标签,但foreach不止可以循环数组,还能循环对象
{foreach $list as $v}
{$v.name}
{/foreach}
// 也可以使用下面的用法:
// name属性表示模板赋值的变量名称,id表示当前的循环变量
{foreach name='list' item='vo'}
{$vo.name}
{/foreach}
// for标签
{for start='开始值' end='结束值' comparison='lt/gt' step='递进值' name='循环变量名'}
{/for}
// 开始值、结束值、步进值和循环变量都可以支持变量,开始值和结束值是必须,其他是可选。comparison 的默 认值是lt,name的默认值是i,步进值的默认值是1
{for start="1" end="100"}
{$i}
{/for}
// if标签
{if condition="表达式"}{/if}
{if (表达式)}{/if}
{if 表达式}{/if}
{if condition='$age>20'}
大于20
{elseif condition='$age<18' /}
小于18
{else /}
其他
{/if}
// PHP标签
{php}echo 'Hello,world!';{/php}