必须先安装think-view扩展并配置'type' => 'Think',否则{$var}等标签原样输出;安装命令为composer require topthink/think-view,配置后需运行composer dump-autoload -o并清除runtime/view缓存。

ThinkPHP 6.x 默认不启用 ThinkTemplate 模板引擎,直接写 {$name} 会原样输出甚至报错;必须手动安装 think-view 扩展并显式配置 'type' => 'Think',否则所有模板标签都无效。
必须先装 think-view 才能用 {$var} 语法
TP6 默认只带 PHP 原生模板引擎(用于错误页),{$var}、{volist} 这类语法属于 think-template,需额外安装驱动:
- 执行
composer require topthink/think-view,完成后检查vendor/topthink/think-view是否存在 - 若提示依赖冲突,加参数重试:
composer require topthink/think-view --with-all-dependencies - 安装后务必运行
composer dump-autoload -o确保自动加载生效 - 不执行这些步骤,哪怕配置改对了,
{$name}依然被当纯文本输出
view.php 配置里 type 必须设为 'Think'
仅装包不够,config/view.php 中的 type 项决定实际使用的引擎:
- 确认该文件中
'type' => 'Think'(字符串,不是Think类名或think小写) -
'view_path' => './view/'路径末尾不能有斜杠,且目录必须真实存在、Web 可读 - 如果控制器里调用
view()->fetch()时传了第 3 个参数(如['tpl_replace_string' => []]),会覆盖全局配置,导致定界符修改失效 - Linux 环境下路径大小写敏感:
app/index/view/Index/index.html≠app/index/view/index/index.html
变量输出必须 assign + fetch 链式调用才生效
$this->assign('title', '首页') 只是把数据塞进上下文,不触发渲染;模板里写 {$title} 却显示原文,大概率是没连上 fetch():
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
立即学习“PHP免费学习笔记(深入)”;
- ✅ 正确写法:
return $this->assign('title', '首页')->fetch(); - ❌ 错误写法:
$this->assign('title', '首页'); return $this->fetch();——fetch()拿不到刚 assign 的值 - 变量名拼错也会静默失败:控制器
assign('user_name', 'Tom'),模板却写{$name},结果原样输出{$name} - 数组/对象可直接传:
$this->assign('user', ['name' => '张三']),模板中用{$user.name}(点号访问,非中括号)
定界符改错或缓存没清会导致 {$var} 不解析
改了 tpl_begin/tpl_end 却仍看到 {$name} 原文?问题通常不在语法本身:
- 修改
config/view.php中的'tpl_begin' => '«'和'tpl_end' => '»'后,模板里必须写成«name»,否则不识别 - ThinkTemplate 编译后的 PHP 文件缓存在
runtime/view/,不删它,旧规则一直生效;执行php think clear --template或手动删该目录 - 定界符别用
[[或{{:Vue 模板、正则字面量/\[\[/会干扰扫描,引发底层 PHP 解析错误 -
tpl_deny_php默认为true,所以<?php echo $name; ?>会被静默过滤掉,不是报错——这不是 bug,是设计行为
最常被忽略的是:改完配置不删缓存,或者以为装了扩展就自动启用,结果一直在用 PHP 原生引擎硬扛模板标签。这两步漏掉任何一个,{$var} 都不会变成真实值。


















