ThinkPHP 8.0 模板引擎配置核心在于 config/view.php:需确认 'type' => 'Think' 类型,修正模板路径(如 app/index/view/user/index.html),调整定界符(如 'tpl_begin' => '

修复 Core bailout 状态损坏安全问题,以及 BZ2、DOM、PDO、Opcache/JIT 内存与执行错误,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
确认当前模板引擎类型
打开 config/view.php,查看 'type' => 'Think' 这一行:
– 值为 'Think':使用内置 ThinkTemplate(默认)
– 值为 'Smarty' 或 'Twig':已切换,需确保对应扩展已安装且类可自动加载
– 若无此配置项,默认就是 Think,无需额外设置
修正模板路径与目录结构
90% 的 Template not found 错误源于路径不匹配。ThinkPHP 8.0 严格按以下规则定位模板:
✅ 正确路径:app/index/view/user/index.html
✅ 对应控制器:app/index/controller/User.php 中的 index() 方法
⚠️ 注意点:
– view 目录必须与 controller 同级(即都在 app/index/ 下)
– 全路径须小写(Linux 环境区分大小写,Windows 可能掩盖问题)
– 自定义视图根目录?修改 'view_path' => './templates/',但末尾不能带斜杠
– 跨模块调用需加 @,例如 $this->fetch('admin@public/header')
修改标签定界符或禁用 PHP 原生语法
若模板中大量使用 { 和 }(如 CSS/JS),容易与 ThinkTemplate 冲突:
– 改定界符:在 view.php 中添加'tpl_begin' => ' '}>'
之后模板中变量要写成 ,而非 {$name}
– 禁用 PHP 原生语法(提升安全):'strip_space' => false,(保留空格便于调试)'tpl_deny_php' => true(禁止 <?php ?> 标签执行)
注意:禁用后所有逻辑必须前置到控制器处理
启用原生 PHP 模板(绕过引擎解析)
这不是“换引擎”,而是跳过解析、直接 include。适用于习惯原生写法或需完全自由控制的场景:
– 将模板后缀改为 .php,并在配置中设:'view_suffix' => 'php'
– 控制器中不再用 $this->fetch(),改用:return view('index', $data);(需已引入 think-helper 或启用 view 辅助函数)
– 或更底层方式:extract($data); include app()->getAppPath() . 'index/view/index.php';
⚠️ 此方式会丢失 {extend}、{block} 等模板继承机制


















