thinkphp 6.1 的 {include} 标签路径匹配严格:必须符合 view 配置的 replace 规则,仅支持从 view 目录起的内部路径(禁用 ../),后缀与大小写须完全一致(如 header.html),传参用 [xxx] 接收,且缓存需手动清除。

{include} 标签能用,但路径、后缀、大小写三者错一个就 Template not found —— 不是语法问题,是文件系统层面没找到。
子模板路径必须匹配 view 配置的 replace 规则
ThinkPHP 6.1 的 {include} 不直接解析相对路径,而是先做字符串替换,再拼到 view_path 下查找。比如配置了 'replace' => ['__STATIC__' => '/static'],那 {includefile='__STATIC__/js/app.js'/} 才有效;写成 {includefile='../static/js/app.js'/} 会直接报错,因为框架不走 PHP 的 dirname(__FILE__) 解析逻辑。
- 绝对路径写法只认配置项里的 key,如
__CSS__、__IMG__,不能手写/public/css/ - 相对路径仅支持从
view目录开始的“内部路径”,例如{includefile='common/header'/}表示app/view/common/header.html - 路径中不能含
../,否则被当成普通字符串,最终拼出app/view/../common/header.html,系统不自动归一化
文件后缀和大小写必须与 config/view.php 完全一致
TP6.1 默认只认 html 后缀,且严格区分大小写。即使你文件叫 Header.html,用 {includefile='common/header'/} 也会失败——因为实际找的是 header.html,不是 Header.html。
- 确认
config/view.php中'view_suffix' => 'html',且'file_ext' => ['html'] - Linux 服务器下,
common/Header.html和common/header.html是两个文件,前者永远加载不到 - 若想支持
htm或tpl,必须显式加进file_ext数组,否则即使文件存在也跳过
传参时变量名要和子模板内占位符格式对齐
{includefile='common/header' title='$title' desc='$desc'/} 这种写法里,$title 是字符串字面量,不是 PHP 变量;子模板里得用 [title](方括号)接收,不是 {$title}。
- 子模板中取值写法固定为
[xxx],比如<title>[title]</title> - 如果传的是数组或对象字段,如
user_name='$vo.name',子模板仍用[user_name],不会自动展开点语法 - 别在
{includefile}里写 PHP 表达式,keywords='<?php echo $seo['kw']; ?>'无效,会被当纯文本处理
多个子模板合并加载容易漏掉分隔符
写 {includefile='common/header,common/nav,common/footer'/} 看似省事,但逗号必须是英文半角,且前后不能有空格,否则解析器会把 'common/header, common/nav' 当成一个文件名,然后报 Template not found: common/header, common/nav。
- 正确写法只有两种:
{includefile='common/header,common/nav,common/footer'/}或分开多行写 - 调试时可临时改成单个加载,逐个验证路径是否通,避免一挂全挂
- 不建议在
{include}里嵌套另一层{include},TP6.1 不限制但极易引发路径错乱,尤其跨目录时
最常被忽略的是缓存机制:改了子模板内容,但页面没更新,不是代码问题,是 runtime/html/ 下的编译缓存没清——删掉整个 html/ 目录比反复检查路径更有效。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











