直接修改模板文件即可解决,但须同步清理缓存、校验标签闭合、替换弃用语法;否则会白屏或静默失效。

直接改模板文件本身就能解决,不需要动框架配置或重装引擎——但必须同步清理缓存、校验标签闭合、替换已弃用语法三步一起做,漏一步都会白屏或静默失效。
先清空 runtime/Cache 和 runtime/Temp 目录
升级后所有模板异常,90% 是缓存残留导致的。TP6 的模板编译器会把旧版语法缓存成损坏的 PHP 文件,即使你改对了模板,框架仍加载旧缓存。
- Linux/macOS:进入项目根目录执行
rm -rf runtime/Cache/* runtime/Temp/* - Windows:手动删掉
runtime/Cache和runtime/Temp两个文件夹下的全部内容(不是只删子文件夹) - 注意:
runtime/Log和runtime/Cache是不同目录,只清前者等于没清;Temp不清,后续所有语法修复都无效
{volist} 和 {include} 标签名大小写与属性名必须严格匹配
TP6 的 think-template 引擎对标签识别更严格,{volist} 不再兼容 {VOLIST} 或 {Volist},且只认 name 和 id 两个属性名,其余全被忽略。
-
{volist name="list" key="k"}✅ 正确 -
{volist NAME="list" KEY="k"}❌ 静默跳过整块,不报错也不输出 -
{volist name="list" index="k"}❌index不是合法属性,等同于没写key,内部{$key}会为空 -
{include file="common/header"}✅ 可用;但{include file="Common/header"}❌ Windows 下可能因大小写敏感找不到文件(尤其 Nginx + Linux 生产环境)
变量输出规则反转:{$var} 不再自动转义,安全输出要加 &
TP5.1 中 {$title} 默认 HTML 转义,TP6 改为默认不转义——这意味着用户输入的内容如果直出,会直接执行 XSS。不改就上线等于开后门。
-
{$title}→ 渲染原始内容(含 HTML 标签) -
{&$title}或{:$title}→ 等价于自动调用htmlspecialchars(),推荐用前者 -
{$content|htmlspecialchars}✅ 也可行,但不如{&$content}简洁 - 特别注意:
{php}标签在 TP6 中默认禁用,若需启用,必须安装topthink/think-template并在config/view.php中设'type' => 'think'
注释语法必须换掉,{//} 和 {% comment %} 在 TP6 中完全失效
TP6 默认使用原生 PHP 模板引擎('type' => 'php'),它根本不认识 TP5.1 的 ThinkTemplate 专属注释。继续留着会导致解析中断、标签不闭合、页面空白。
-
{// 这是注释}❌ 直接报错或原样输出到页面 -
{% comment %}多行注释{% endcomment %}❌ 同样不识别 -
✅ 所有版本通用,无条件兼容 - 如果坚持用模板引擎注释,必须显式启用 think-template:
composer require topthink/think-template,并在config/view.php中设'type' => 'think',之后才能用{# #}(TP8 语法,TP6 不支持{//})
最易被忽略的是 runtime/Temp 目录没清干净,以及 {volist} 里用了 index 这种“看着像”的属性名——它不会报错,只会让循环变量始终为空,排查时容易误判为数据没传进来。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











