{include}标签路径写错是首页调用不到公共头部的最常见原因,必须使用模板目录下的相对路径(如{include file="public/header"}对应view/public/header.html),跨模块用“模块@路径”,绝对路径用“/路径”,传参需字符串键值对,静态资源须用{__static__}。

{include} 标签路径写错,是首页调用不到公共头部的最常见原因。不是语法不会用,而是路径没对上模板引擎的查找规则。
为什么 {include file="public/header"} 在首页里不生效
ThinkPHP 6 的 {include} 不走 PHP 的 include_path,也不认当前文件所在目录的相对路径(比如 ../common/header)。它只从「当前模板目录」开始解析,且默认不带后缀、不自动补 .html。
- 你写
{include file="public/header"},引擎会去找view/public/header.html(注意是.html,不是.php或其他) - 如果实际路径是
view/index/public/header.html,那必须写成{include file="index/public/header"} - 如果想跨模块引用(比如首页在
index模块,要引admin模块下的公共头),得用{include file="admin@public/header"},前提是admin是已注册模块名 - 绝对路径写法更稳:
{include file="/public/header"}→ 对应view/public/header.html
传参给头部模板时,title 变量为啥取不到
变量能继承,但显式传参才可控。直接在控制器里 $this->assign('title', '首页'),然后头部里用 {$title} 是可行的;但如果用 {include} 传参,必须用字符串键值对形式,不能写 PHP 表达式。
- ✅ 正确:
{include file="public/header" title="首页" is_login=$is_login} - ❌ 错误:
{include file="public/header" data="['title'=>'首页']"}→ ThinkPHP 不解析这种数组字面量 - 复杂数据建议提前赋值:
$this->assign('header_data', ['title' => '首页', 'nav' => $nav_list]);,再{include file="public/header" header_data=$header_data}
引入后 CSS 和 JS 全 404,是不是 {include} 有问题
不是。HTML 资源路径(<link href="/static/css/app.css">)是相对于当前 URL 解析的,{include} 只做字符串拼接,不会重写 href 或 src。所以问题出在资源路径写法上。
- 静态资源必须用
{__STATIC__}助手变量:<link href="%7B__STATIC__%7D/css/app.css"> - 不要写死
/static/或./static/,否则在子目录路由(如/user/profile)下会错乱 - 检查
config/template.php中view_path是否指向正确的view/目录,否则模板根本没加载成功
最容易被忽略的一点:ThinkPHP 6 默认不启用模板缓存调试模式,改了 header.html 但页面没变?先清缓存——删掉 runtime/view/ 下所有文件,或者临时设 'cache_time' => 0。路径、传参、资源三者全对,{include} 就不会掉链子。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











