商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > ThinkPHP视图怎么引入公共头部_ThinkPHP模板include复用介绍【介绍】

ThinkPHP视图怎么引入公共头部_ThinkPHP模板include复用介绍【介绍】

  发布于2026-07-11 阅读(0)

扫一扫,手机访问

ThinkPHP 视图中引入公共头部,最直接高效的方式就是使用 include 标签——不过呢,路径怎么写、变量怎么传、模板引擎的行为习惯,这些细节要是没摸透,很容易碰上报错或者渲染空白的情况。先说说核心的几个判断。

ThinkPHP 6 的 {include file="xxx"} 路径到底怎么写才正确

ThinkPHP 6 底层用的是 ThinkTemplate 引擎,includefile 参数不支持相对路径,比如 ./header.html 这种写法就别想了,也不推荐直接填完整路径。正确的做法,是基于 view_path 配置来写相对路径:

  • 公共文件如果放在 app/view/common/header.html,那在任何模板里直接写 {include file="common/header"} 就行。
  • 即使你在子目录里引用,比如 app/view/admin/index.html,写法仍然是 {include file="common/header"},别自作主张加 ../
  • 后缀 .html 可以省略,但加上更清晰;如果模板后缀配置成了 .php,那自然得写成 common/header.php
  • 路径里绝对不能出现 ./../,否则解析会直接失败,返回空内容,而且连个报错提示都不会给——这属于“静默失败”,最让人头疼的那种。

为什么 {include} 里用不到父模板的变量

这个问题非常典型。ThinkPHP 的 include 默认是“局部作用域”,被引入的子模板(比如 header)不能直接访问父模板传进来的数据。解决方案有三种,但各有优劣:

  • 显式传参:{include file="common/header" title="$title" user="$user"},子模板里就能直接用 $title 了。最推荐,清晰明了。
  • 全量继承当前作用域:加上 assign="true" 属性,{include file="common/header" assign="true"},但这么做容易造成变量污染,尤其是在多层嵌套 include 的场景下,调试起来非常痛苦。
  • 更稳妥的方案:在控制器里统一用 View::assign() 预设好公共变量,比如 site_namena v_list,然后在 header.html 里直接使用。这样变量来源清晰,维护起来也省心。

include 进来的模板里能用 {block}

结论很明确:不能。ThinkPHP 的 {block}{extend} 是布局继承机制的一部分,只在顶层模板(也就是被 fetch() 渲染的那个)里生效;include 本质上是纯内容拼接,不会触发继承解析。这就意味着:

  • 如果在 common/header.html 里写了 {block name="title"}默认标题{/block},父模板里的 {block name="title"}首页{/block} 根本覆盖不了它。
  • 想实现类似的效果,得改用 {extend name="layout/master"} + {block} 的方式重构结构,把 header 放到 layout 模板里,而不是靠 include
  • 混用 includeextend 很容易把逻辑搞乱,建议二选一:简单复用用 include,复杂布局统一用 extend。

最后提醒一个容易被忽略的点:缓存行为。include 的文件修改之后,如果开启了模板缓存(默认是开启的),可能不会立即生效。这时候需要清空 runtime/view/ 目录,或者在调试阶段临时关闭 template.cache 配置——否则你会纳闷“明明改了,怎么就是没反应”。

本文转载于:https://www.php.cn/faq/2382248.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注