子模板内容不显示,大概率是模板继承未生效:{extend}必须顶格写在子模板首行,name不带后缀且路径准确;父模板须定义同名{block},否则子内容静默丢失;需清空cache与temp缓存,且控制器fetch()不依赖layout_on配置。

子模板内容不显示,大概率不是内容丢了,而是模板继承根本没跑起来——布局链在第一步就断了。
extend 写法或位置不对
ThinkPHP5.1 要求 {extend} 必须出现在子模板文件的第一行、顶格、无空格、无空行、无任何前置输出(包括 PHP 注释、BOM、空白符)。常见错误:
- 写成 {extends}(多了一个 s)
- {extend name="base"} 写在第二行,或前面有空行/注释
- name 值带后缀,比如写成 name="base.html"(应为 name="base")
- 路径错误:name="public/base" 对应的是 view/public/base.html;若实际放在 view/layout/base.html,就得写 name="layout/base"
父模板里没定义对应 block
子模板写了 {block name="content"}xxx{/block},但父模板中压根没有 {block name="content"}…{/block},那这部分内容会被静默丢弃,页面上什么也不显示。
- 检查父模板是否漏写 {block} 标签,或名称大小写不一致(content ≠ Content)
- 注意:{block} 不是占位符,而是“可被替换的区块”,父模板中没声明,子模板就无法覆盖,也不会 fallback 显示默认内容
- 如果父模板用的是 {__CONTENT__}(布局方式),而你却在子模板用 {extend}(继承方式),两者互斥,不能混用
模板缓存未清理
TP5.1 升级或修改模板后,runtime/Cache 和 runtime/Temp 两个目录的缓存必须同时清空,否则旧编译结果会持续生效,导致语法正确但行为异常。
- 只删 Cache 目录无效,Temp 里的哈希映射表也得清
- Windows 用户建议直接删除整个 runtime/Cache 和 runtime/Temp 文件夹
- Linux/macOS 可执行:rm -rf runtime/Cache/* runtime/Temp/*
控制器未正确调用 fetch()
即使模板写对了,控制器中若用了 return $this->fetch('test2') 但没指定后缀或路径,也可能加载错文件;更关键的是:开启 layout_on => true 后,默认的 $this->fetch() 不触发布局逻辑。
- 模板继承与模板布局是两套机制,不要同时开启 layout_on 并期望它影响 {extend}
- 确保控制器中返回的是视图路径正确,例如 return $this->fetch('lyot/test2'); 对应 view/lyot/test2.html
- 调试时可在浏览器查看源码:如果开头就是子模板的 HTML 片段(没有父模板的 或 ),说明 {extend} 完全没执行











