thinkphp8的{include}标签默认从当前模板目录查找,推荐用{include file="/public/header"}从view根目录引入;传参需显式写如title="首页",不支持php数组字面量;资源路径须用{__static__}/css/app.css等绝对路径。

{include} 标签不是 PHP 的 include,它只认模板目录下的路径,写错就 404。
路径怎么写才不报错
ThinkPHP8 的 {include} 不走 PHP 的 include_path,也不解析 ../ 或 ./ 这类相对路径。它默认从「当前模板所在目录」开始找,但绝大多数人真正需要的是从 view/ 根目录出发。
-
{include file="public/header"}→ 找view/[当前模块]/public/header.html(容易跨模块错位) -
{include file="admin@public/header"}→ 找view/admin/public/header.html(仅当admin是合法模块名时有效) -
{include file="/public/header"}→ 找view/public/header.html(推荐,语义清晰、不易出错) - ❌
{include file="./header"}、{include file="header.html"}、{include file="../common/footer"}→ 全部会失败
传参时变量怎么用才安全
被包含模板默认能访问父模板的全部变量,但显式传参更可控、可读性更强,且避免意外覆盖。
-
{include file="/public/header" title="首页" is_login=1}→ 在header.html中直接用{$title}、{$is_login} -
{include file="/public/header" user_name=$user.name avatar_url=$user.avatar}→ 支持点语法取值,但不能带函数调用(如$user->getName()) - ❌
{include file="/public/header" data="['title'=>'首页']"}→ ThinkPHP 不解析 PHP 数组字面量,直接报错或静默忽略 - 复杂数据建议提前在控制器中赋值:
$this->assign('header_data', $data),再用{include file="/public/header" header_data=$header_data}
CSS/JS 路径乱了不是 {include} 的锅
引入后页面样式崩、资源 404,通常和 {include} 本身无关,而是 HTML 中的静态资源路径(如 <link href="css/app.css">)被浏览器按当前 URL 解析,而非按模板文件位置解析。
- 绝对路径写法才是稳的:
<link href="%7B__STATIC__%7D/css/app.css">或<link href="/static/css/app.css"> -
{__STATIC__}是模板替换变量,默认指向/static,可在config/template.php中通过'TMPL_PARSE_STRING'修改 - 不要依赖
./或../相对路径加载资源,尤其在多级子目录模板中极易失效
最常被忽略的一点:路径里的斜杠方向、开头有没有 /、大小写是否和实际文件名完全一致——ThinkPHP 模板路径区分大小写,Linux 服务器上一个字母错了就是 404。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











