查看演示
Menu
快速导航

模板语法

ThinkPHP6 默认使用了 Think模板引擎,这是一种轻量级的模板引擎,旨在提高开发效率。它的主要特点是:

  1. 支持模板文件的自动加载。
  2. 支持模板中的常见语法,如变量输出、控制结构、模板继承等。
  3. 支持模板标签的解析。
  4. 提供了一些方便的函数和变量来处理数据和渲染页面。

输出变量

在模板中,你可以使用{} 来输出变量值

<p>{$name}</p>

这会将 $name 变量的值输出到页面上。你还可以进行修饰符操作,例如:

<p>{$name|default="默认值"}</p>

如果 $name 为空,显示 默认值。

控制结构

ThinkPHP6 的模板语法支持条件判断、循环等控制结构:

if 语句

{if $age > 18}
  <p>成年人</p>
{else}
  <p>未成年人</p>
{/if}

可以使用php代码,例如:

{if strtoupper($user['name']) == 'THINKPHP' }ThinkPHP
{else /} other Framework
{/if}

foreach 循环

{foreach $items as $item}
  <p>{$item}</p>
{/foreach}

for 循环

{for $i = 0; $i < 5; $i++}
  <p>{$i}</p>
{/for}

SWITCH标签

{switch 变量 }
    {case value1 }输出内容1{/case}
    {case value2}输出内容2{/case}
    {default /}默认情况
{/switch}

范围判断

范围判断标签包括in/notin/between/notbetween四个标签,都用于判断变量是否中某个范围。

IN和NOTIN

用法: 假设我们中控制器中给id赋值为1:

$id =    1;
View::assign('id',$id);

我们可以使用in标签来判断模板变量是否在某个范围内,例如:

{in name="id" value="1,2,3"}
id在范围内
{/in}

最后会输出:id在范围内

如果判断不在某个范围内,可以使用notin标签:

{notin name="id" value="1,2,3"}
id不在范围内
{/notin}

最后会输出:id不在范围内

可以把上面两个标签合并成为:

{in name="id" value="1,2,3"}
id在范围内
{else/}
id不在范围内
{/in}

name属性还可以支持直接判断系统变量,例如:

{in name="Think.get.id" value="1,2,3"}
$_GET['id'] 在范围内
{/in}

value属性也可以使用变量,例如:

{in name="id" value="$range"}
id在范围内
{/in}

$range变量可以是数组,也可以是以逗号分隔的字符串。

value属性还可以使用系统变量,例如:

{in name="id" value="$Think.post.ids"}
id在范围内
{/in}

BETWEEN/NOTBETWEEN

可以使用between标签来判断变量是否在某个区间范围内,可以使用:

{between name="id" value="1,10"}
输出内容1
{/between}

同样,也可以使用notbetween标签来判断变量不在某个范围内:

{notbetween name="id" value="1,10"}
输出内容2
{/notbetween}

也可以使用else标签把两个用法合并,例如:

{between name="id" value="1,10"}
输出内容1
{else/}
输出内容2
{/between}

PRESENT/NOTPRESENT

present标签用于判断某个变量是否已经定义,用法:

{present name="name"}
name已经赋值
{/present}

如果判断没有赋值,可以使用:

{notpresent name="name"}
name还没有赋值
{/notpresent}

可以把上面两个标签合并成为:

{present name="name"}
name已经赋值
{else /}
name还没有赋值
{/present}

present标签的name属性可以直接使用系统变量,例如:

{present name="Think.get.name"}
$_GET['name']已经赋值
{/present}

EMPTY/NOTEMPTY

empty标签用于判断某个变量是否为空,用法:

{empty name="name"}
name为空值
{/empty}

如果判断没有赋值,可以使用:

{notempty name="name"}
name不为空
{/notempty}

可以把上面两个标签合并成为:

{empty name="name"}
name为空
{else /}
name不为空
{/empty}

name属性可以直接使用系统变量,例如:

{empty name="Think.get.name"}
$_GET['name']为空值
{/empty}

DEFINED 

DEFINED标签用于判断某个常量是否有定义,用法如下:

{defined name="NAME"}
NAME常量已经定义
{/defined}

name属性的值要注意严格大小写

如果判断没有被定义,可以使用:

{notdefined name="NAME"}
NAME常量未定义
{/notdefined}

可以把上面两个标签合并成为:

{defined name="NAME"}
NAME常量已经定义
{else /}
NAME常量未定义
{/defined}

函数使用和运算符

我们可以对模板输出使用运算符,包括如下支持。

运算符 使用示例
+ {$a+$b}
- {$a-$b}
* {$a*$b}
/ {$a/$b}
% {$a%$b}
++ {$a++}{++$a}
-- {$a--}{--$a}
综合运算 {$a+$b*10+$c}

在使用运算符的时候,不再支持前面提到的函数过滤用法,例如:

{$user.score+10} //正确的
{$user['score']+10} //正确的
{$user['score']*$user['level']} //正确的
{$user['score']|myFun*10} //错误的
{$user['score']+myFun($user['level'])} //正确的

三元运算

模板可以支持三元运算符,例如:

{$status? '正常' : '错误'}
{$info['status']? $info['msg'] : $info['error']}
{$info.status? $info.msg : $info.error }

还支持如下的写法:

{$name ?? '默认值'}

表示如果有设置$name则输出$name,否则输出默认值。

{$name?='默认值'} 

表示$name为真时才输出默认值。

{$name ?: 'NO'}

表示如果$name为真则输出$name,否则输出NO。

{$a==$b ? 'yes' : 'no'}

前面的表达式为真输出yes,否则输出no, 条件可以是==、===、!=、!==、>=、<=

原生PHP

Php代码可以和标签在模板文件中混合使用,可以在模板文件里面书写任意的PHP语句代码 ,包括下面两种方式:

使用php标签

{php}echo 'Hello,world!';{/php}

我们建议需要使用PHP代码的时候尽量采用php标签,因为原生的PHP语法可能会被配置禁用而导致解析错误。

使用原生php代码

<?php
echo 'Hello,world!';
?>

注意:php标签或者php代码里面就不能再使用标签(包括普通标签和XML标签)了,因此下面的几种方式都是无效的:

{php}{eq name='name'value='value'}value{/eq}{/php}

Php标签里面使用了eq标签,因此无效

{php}if( {$user} != 'ThinkPHP' ) echo  'JIJINCMS' ;{/php}

Php标签里面使用了{$user}普通标签输出变量 ,因此无效。

{php}if( $user.name != 'ThinkPHP' ) echo  'JIJINCMS' ;{/php}

Php标签里面使用了$user.name点语法变量输出 ,因此无效。

简而言之,在PHP标签里面不能再使用PHP本身不支持的代码。

系统变量输出

普通的模板变量需要首先赋值后才能在模板中输出,但是系统变量则不需要,可以直接在模板中输出,系统变量的输出通常以{$Request.(大小写一致) 打头,例如:

{$Request.server.script_name} // 输出$_SERVER['SCRIPT_NAME']变量
{$Request.session.user_id} // 输出$_SESSION['user_id']变量
{$Request.get.page} // 输出$_GET['page']变量
{$Request.cookie.name}  // 输出$_COOKIE['name']变量

支持输出$_SERVER、$_ENV、$_POST、$_GET、$_REQUEST、$_SESSION和$_COOKIE变量。

$Request.方法名.参数

例如接收get传递的参数:

{$Request.param.name}

支持Request类的大部分方法,但只支持方法的第一个参数。

下面都是有效的输出:

// 调用Request对象的param方法 传入参数为name
{$Request.param.name}
// 调用Request对象的param方法 传入参数为user.nickname
{$Request.param.user.nickname}
// 调用Request对象的root方法
{$Request.root}
// 调用Request对象的root方法,并且传入参数true
{$Request.root.true}
// 调用Request对象的path方法
{$Request.path}
// 调用Request对象的module方法
{$Request.module}
// 调用Request对象的controller方法
{$Request.controller}
// 调用Request对象的action方法
{$Request.action}
// 调用Request对象的ext方法
{$Request.ext}
// 调用Request对象的host方法
{$Request.host}
// 调用Request对象的ip方法
{$Request.ip}
// 调用Request对象的header方法
{$Request.header.accept-encoding}

常量输出

还可以输出常量

{$Think.const.PHP_VERSION}

或者直接使用

{$Think.PHP_VERSION}

配置输出

仅用于输出ThinkPHP6.0+中的配置参数使用:

{$Think.config.app.app_host}
{$Think.config.session.name}

语言变量

仅用于输出ThinkPHP6.0+的语言变量使用:

{$Think.lang.page_error}
{$Think.lang.var_error}

快速导航

0.122200s