ThinkPHP5.1模板变量渲染核心是赋值+输出,自动转义保障安全;支持单个/批量assign及fetch传参,模板中用{$var}语法输出,系统变量通过{$Think.*}访问,需谨慎使用|raw绕过转义。

ThinkPHP5.1 实现模板变量渲染,核心是“赋值 + 输出”两步配合模板引擎自动编译机制。默认使用 {$name} 语法输出,且会自动经 htmlentities() 转义,这是安全前提,也是新手容易踩坑的地方。
控制器中完成变量赋值
赋值必须在调用模板前完成,有三种常用方式:
- 单个赋值:
$this->assign('title', '欢迎页'); - 批量赋值:
$this->assign(['title' => '首页', 'user' => ['name' => '张三', 'age' => 28]]); - 通过
fetch()方法直接传参:return $this->fetch('index', ['title' => '首页']);(该方式不触发 assign,仅本次生效)
模板中正确输出变量
变量名必须严格匹配,且标签格式不能有空格:
- 基础字符串:
{$title}→ 编译为<?php echo htmlentities($title); ?> - 数组元素:
{$user.name}或{$user['name']}(二者等效) - 对象属性:
{$info->title}(要求对象可访问该属性) - 默认值支持:
{$user.nickname|default='游客'} - 注意:
{ $title}(含空格)无效,会被原样输出
系统变量与常量直接调用
无需提前 assign,模板中可直接读取运行时上下文:
立即学习“PHP免费学习笔记(深入)”;
- GET 参数:
{$Think.get.id} - 服务器信息:
{$Think.server.HTTP_HOST} - 配置项:
{$Think.config.app_debug} - PHP 常量:
{$Think.const.PHP_VERSION}或简写{$Think.PHP_VERSION}
绕过转义的特殊场景处理
当输出 HTML、JSON 或富文本内容时,需显式取消自动转义,但务必前置过滤:
- 加
|raw修饰符:{$content|raw} - 但必须确保
$content已做过安全处理(如htmlspecialchars_decode()、白名单过滤或来自可信来源) - 错误示例:
{$user_input|raw}(未过滤的用户输入直接 raw → XSS 风险)



















