基本概念
视图
-
决定向模板传入什么数据,以及显示哪个模版。
-
视图功能,由\think\View类配合视图驱动类完成。
文件路径: thinkphp/library/think/View.php -
视图文件根目录,默认在模块的view目录。
模板
-
定义如何接收、显示数据。
-
呈现html;
-
目前的内置模板引擎包括PHP原生模板和Think模板引擎。
调用视图
一、没有继承 \think\Controller
view('[控制器:]视图文件的名称,注意不包含.html'[,'模板变量(数组)'])
实例
注意,不一定是本控制器下的视图文件,别的控制器下的也行。
public function hello($name = 'ThinkPHP5')
{
//return 'hello,' . $name;
return view('admin:hello');
}
二、继承了 \think\Controller
fetch'[模板文件]',[模板变量](关联数组))
虽然fetch方法也可以传递传参到模板文件,但是一般还是使用模板赋值的方法进行参数传递。
模板文件写法
-
不带任何参数,自动定位对应控制器对应方法视图文件.
当前模块/view/当前控制器名(小写)/当前操作(小写).html
-
[模块@]控制器/方法 可以跨模块操作
-
完整模板文件名
实例
return $this->fetch('admin@member/edit', ['name' => 'thinkphp']);
模板赋值
基本方法
单个参数传值
assign()
批量传值
assign([
'key1'=>'value1',
'key2'=>'value2',
])
实例
public function index()
{
// 模板变量赋值
$this->assign('name','ThinkPHP');
$this->assign('email','thinkphp@qq.com');
// 或者批量赋值
$this->assign([
'name' => 'ThinkPHP',
'email' => 'thinkphp@qq.com'
]);
// 模板输出
return $this->fetch('index');
}
模板标签
内置的模板引擎,支持普通标签和XML标签两种。
变量
普通变量:{$变量名称}
索引数组:{$数组名称[下标]}
关联数组:{$变量名称[下标]} 或 {$变量名称.下标}
对象:{$变量名称:属性名称}
系统变量、系统常量、配置选项
{$Think.系统变量.下标}
{$Think.常量} 或 {$Think.const.常量}
{$Think.config.配置Key}
使用函数
1. 单个参数: {变量 | 函数名称}
如: {$username | strtoupper}
2. 多个参数: {变量 | 函数名称,占位符}
如:
传入的参数 $str = javascript
{$str | substr=0,4}
最终显示java。
3. 三元运算:{变量 ? 值1 : 值2}
如:
{$sex ? '男' : '女'}
扩展
1. 如果有该变量,输出改变量,否则输出默认值
{$name ?? '默认值'}
2. true,输出默认值
{$name ?= '默认值'}
3. false,输出默认值
{$name ?: 'NO'}
4. 表达式为真,输出第一项;否则输出第二项
{$a==$b ? 'yes' : 'no'}
循环输出标签
foreach循环
{foreach $list as $vo}
{$vo.id}:{$vo.name}
{/foreach}
volist循环
{volist name='list' id='vo' offset='5' length ='10'}
{vo.name}
{/volist}
name:要遍历的数组
id: 每个成员的名字
offset:从第几个开始
length:输出几个
判断标签
if标签
{if condition="($name == 1) OR ($name > 100)"}
value1
{elseif condition="$name eq2"/}
value2
{else /}
value3
{/if}
SWITCH标签
{switch name="变量"}
{case value="值1"}
内容
{/case}
{case value="值2"}
内容2
{/case}
{default /}
默认情况
{/switch}