{include}标签用于纯内容嵌入,不改变模板结构,适合复用导航、页脚等固定模块;路径须为view目录下相对路径,需显式写.html后缀,不支持../或绝对路径,传参用字符串键值对。

include 标签用于局部复用,不改变模板结构
{include} 是纯内容嵌入,相当于把另一个模板文件的 HTML 片段原样“粘贴”进来,不涉及继承关系或区块替换。它适合复用导航、侧边栏、页脚等固定模块。
常见错误是路径写错或文件不存在时静默失败(无报错),只留空白。ThinkPHP 5 默认从 view/ 目录开始解析路径,不支持绝对路径,也不自动补 .html 后缀(需显式写出)。
- 正确写法:
{include file="common/nav" /}→ 加载view/common/nav.html - 带参数传递:
{include file="widget/user_card" username="$user.name" avatar="$user.avatar" /} - 不能嵌套
{block}:被 include 的文件里写{block name="xxx"}{/block}不会被父模板识别
extend 标签实现模板继承,必须配合 block 使用
{extend} 是模板继承的入口,它让当前模板“基于”另一个基础模板渲染。但仅写 {extend name="common/base" /} 不会生效——必须用 {block name="xxx"}{/block} 明确声明要覆盖哪一部分。
典型错误是忘记写 {block},或名字拼错(如 name="foot" 对应基模板的 name="footer"),结果整个区块保持基模板默认内容,看起来“没生效”。
访问全球海洋潮汐模型。功能包括查询指定日期、时间和地点的潮高、潮汐极值及格点天气数据。
- 基模板(
view/common/base.html)必须包含至少一个{block name="xxx"}{/block} - 子模板第一行必须是
{extend name="common/base" /},且不能有空格或换行在前面 - 子模板中所有可替换内容都必须包在
{block name="xxx"}{/block}内,否则会被忽略 -
{__block__}可用于在子模板中保留基模板该区块的原始内容(例如追加而非覆盖)
include 和 extend 不能混用在同一个逻辑层级
你不能在一个用了 {extend} 的模板里,再用 {include} 去加载另一个也用了 {extend} 的模板——ThinkPHP 5 不支持多层继承嵌套。include 进来的文件只能是纯片段,不能含 {extend} 或顶层 {block}。
性能上,{include} 是简单文件读取+变量替换;{extend} 需先解析基模板、再合并子模板的 block 内容,开销略高,但结构更清晰。
- 想复用「结构+样式+逻辑」?用
{extend}+ 多个{block} - 只想插入一段 HTML(比如广告位、统计代码)?用
{include} - 想动态切换布局?别硬套 extend,改用
fetch()或控制器中指定view->fetch('template_name')
路径和命名空间陷阱最常被忽略
ThinkPHP 5 的模板路径不走 PHP 命名空间规则,而是按目录相对 view_path 解析。file="admin/menu" 永远指向 view/admin/menu.html,和 PHP 类的 \app\view\admin\menu 无关。
另外,{include} 和 {extend} 都不支持点号(.)作为路径分隔符以外的用途——比如 file="common.nav" 会被当成 view/common.nav.html,而不是 view/common/nav.html。
- 路径中禁止使用
../或绝对路径,一律以view/为根 - 文件后缀必须匹配
view_suffix配置(默认html),不写后缀不会自动补 - 调试时可在配置中开启
'tpl_cache' => false,避免缓存掩盖路径错误
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










