ThinkPHP的{include}标签通过模板引擎编译时拼接内容实现文件包含,非PHP运行时引入;路径必须基于view根目录,推荐写法为{include file="/public/header"},传参需字符串键值对,静态资源须用{__STATIC__},修改后需清缓存生效。

ThinkPHP 的文件包含主要通过 {include} 标签实现,本质是模板引擎在编译阶段将目标模板内容“拼接”进当前模板,不是 PHP 运行时的 require/include。关键在于路径写法、作用域控制和缓存刷新,三者任一出错都会导致引入失败或样式错乱。
路径必须基于模板根目录,不能用普通相对路径
ThinkPHP 的 {include} 不识别 ./、../ 或 PHP 的 include_path,只认「模板目录(即 view/)下的相对路径」:
-
正确写法(推荐绝对路径):
{include file="/public/header"}→ 对应view/public/header.html -
跨模块引用:
{include file="admin@public/header"}→ 对应view/admin/public/header.html -
错误写法:
{include file="../common/header"}或{include file="header.html"}→ 会尝试在当前模板同级目录找,大概率 404
传参要字符串键值对,复杂数据建议控制器预赋值
被包含模板默认继承父模板变量,但显式传参更清晰、可控:
- 传单个值:
{include file="/public/header" title="首页" is_login=1}→ header.html 中直接用{$title} - 传动态变量:
{include file="/public/header" user_name=$user.name avatar=$user.avatar} -
不能传 PHP 数组字面量:
{include file="/public/header" data="['a'=>1]"}是无效语法 - 复杂结构建议在控制器中统一赋值:
$this->assign('header_data', $data);,再{include file="/public/header" header_data=$header_data}
静态资源路径不会自动修正,需用 {__STATIC__} 或全路径
包含只是 HTML 字符串拼接,<link href="css/app.css"> 这类路径仍按当前 URL 解析,极易 404:
立即学习“PHP免费学习笔记(深入)”;
- 在
header.html中写静态资源,必须用模板常量:<link href="{__STATIC__}/css/app.css"> - 或使用完整 URL:
<script src="{:url('/static/js/common.js')}"></script> - 避免硬编码相对路径如
../static/或./css/,它们在不同路由下会失效
修改后必须清空缓存,否则看不到效果
ThinkPHP 模板引擎默认缓存编译结果,即使你改了 header.html,只要缓存没过期,页面就还是旧内容:
- 开发阶段:开启
APP_DEBUG = true,缓存自动失效 - 生产环境:手动删除
Runtime/Cache/下对应模块的缓存文件夹,或执行php think clear - 注意:包含文件本身不触发重新编译,只有入口模板变化或缓存超时才会更新



















