ThinkPHP模板变量输出统一用{$变量名}语法,支持普通变量、数组(关联/索引)、对象及系统变量{$Think.xxx},可加|过滤函数、|default默认值和|raw原样输出,需注意自动转义安全机制与语法规范。

ThinkPHP模板中输出变量,核心是用{$变量名}语法,但不同变量类型、来源和安全要求,写法和注意事项各不相同。
普通变量和数组变量
控制器中通过assign()传值后,在模板里直接调用:
- 字符串:控制器
$this->assign('title', '欢迎页')→ 模板写{$title} - 关联数组:控制器
$this->assign('user', ['name' => '王五', 'level' => 3])→ 模板可用{$user.name}或{$user['name']} - 索引数组:如
$list = ['a', 'b'],用{$list[0]}输出第一个元素 - 批量赋值更简洁:
$this->assign(['name' => '张三', 'city' => '深圳']),模板中直接{$name} {$city}
对象变量和系统变量
对象属性支持两种写法,系统变量则无需手动赋值:
- 对象(如
$user = new User(); $user->name = '李四';)→ 模板写{$user:name}或{$user->name} - 系统变量统一以
{$Think.xxx}开头,例如:{$Think.get.id}(获取$_GET['id']){$Think.session.user_name}(获取$_SESSION['user_name']){$Think.server.HTTP_HOST}(获取$_SERVER['HTTP_HOST'])
带处理函数和默认值
输出前可加过滤函数或设兜底内容,提升安全性和健壮性:
立即学习“PHP免费学习笔记(深入)”;
- 用
|管道符接函数:{$title|htmlspecialchars}、{$time|date='Y-m-d'} - 多个函数嵌套时,用
###占位:{$name|str_replace='a','A',###|strtoupper} - 变量可能为空?加上
|default:{$user.intro|default='暂无介绍'}、{$Think.get.q|default='首页'}
安全与常见陷阱
默认转义防XSS,但富文本等需显式放开,务必前置过滤:
- 普通
{$content}会自动经htmlentities()转义,防止脚本注入 - 若要原样输出HTML或JSON,必须加
|raw:{$html_content|raw},但前提是该内容已由后端做过安全清洗(如htmlspecialchars_decode()或白名单过滤) - 标签不能有空格:
{$ name}无效,必须写成{$name} - 界定符可自定义(如
{{ $name }}),需在配置中改TMPL_L_DELIM和TMPL_R_DELIM



















