ThinkPHP5模板变量输出必须用{$name}格式,空格会导致原样输出;数组支持点号和方括号语法;volist是唯一遍历标签;对象用->、系统变量用Think.前缀;所有输出默认HTML转义。

变量输出必须用 {$name},不能有空格
模板里写 {$name} 才能正确解析;写成 { $name}(花括号后带空格)或 {$ name}(美元符前带空格)都会原样输出字符串,不执行变量替换。编译后生成的 PHP 代码是 <?php echo htmlentities($name);?>,所以空格会破坏语法结构。
常见错误现象:页面直接显示 { $name} 文字,而不是变量值。
- 标量(字符串、数字)直接
{$name} - 布尔值或 null 也会被
htmlentities()处理,输出为空或 “1”/“” —— 若需保留原始值,改用{:var_export($name, true)} - 变量名区分大小写,
{$Name}和{$name}是两个不同变量
数组元素用 {$arr.key} 或 {$arr['key']} 都行
ThinkPHP5 模板引擎对数组访问做了兼容处理:点号语法和方括号语法在绝大多数场景下等效,底层都转为 $arr['key'] 访问。
使用场景:
立即学习“PHP免费学习笔记(深入)”;
- 关联数组推荐
{$user.name},简洁直观 - 含特殊字符的 key(如
user-name、2024_data)必须用{$user['user-name']},点号语法会报错 - 数字索引数组只能用
{$list[0]},{$list.0}不支持 - 嵌套数组支持多级,如
{$config.database.host}等价于$config['database']['host']
volist 标签是遍历数组的唯一标准方式
不要试图用 {foreach} 或 {for} —— ThinkPHP5 默认模板引擎不支持这些标签,强行写会导致解析失败或静默忽略。
volist 的核心参数只有两个必须项:name(传入的变量名)和 id(循环内使用的别名):
-
{volist name="list" id="item"}→ 循环体中用{$item.id}、{$item.title} - 支持
offset和length分页截取:{volist name="list" id="item" offset="5" length="10"} - 空数组时,
empty属性可 fallback:{volist name="list" id="item" empty="暂无数据"} - 注意:如果
list是 null 或非数组,volist会静默跳过,不报错也不渲染
对象属性和系统变量要区分调用语法
对象用箭头 ->,系统变量用 Think. 前缀 —— 混用会失效。
- 普通对象:
{$user->username}(不是{$user.username}),否则按数组逻辑访问失败 - 系统变量统一走
{$Think.get.id}、{$Think.session.user_id},不可省略Think. - 常量输出用
{$Think.const.APP_DEBUG}或简写{$Think.APP_DEBUG} - 配置项必须通过
Think.config:{$Think.config.default_module},直接{$default_module}不生效
最易被忽略的一点:所有模板变量输出默认经过 htmlentities() 转义,若变量本身已含 HTML(如富文本内容),需显式用 {:htmlspecialchars_decode($content)} 或改用 {:raw($content)} 绕过转义 —— 但务必确认内容可信,否则有 XSS 风险。



















