为什么ThinkPHP公共片段不应依赖继承链【模板】

{include}引入的公共片段脱离继承体系,其内部{block}对子模板不可见;需定制的内容必须定义在布局模板中并用{block}包裹,子模板通过{extend}继承后方可覆盖。

为什么thinkphp公共片段不应依赖继承链【模板】

因为 {include}{extend} 的执行时机完全不同,公共片段一旦用 {include} 引入,就脱离了继承体系的控制范围。

公共片段不参与继承链

在父模板中写 {include file="common/header" /},只是运行时把 header.html 的内容原样插入进来。此时模板引擎已完成编译期处理(包括 {extend} 注入、{block} 替换),header.html 里的任何 {block} 对子模板完全不可见——子模板无法覆盖它,也无法向其中注入内容。

  • header.html 中的 {block name="logo"} 不会被识别为可继承区块
  • 子模板里同名 {block name="logo"} 会被直接忽略(无报错)
  • 最终渲染结果是 header.html 原始内容 + 子模板其他 {block} 替换结果,两者互不影响

真正需要定制的部分必须进布局模板

想让标题、JS 加载位置、页面主体等可被子模板控制,这些区域必须直接定义在基础布局模板(如 layout.html)里,并用 {block} 包裹:

  • {block name="title"}首页{/block}
  • {block name="content"}<p>默认内容</p>
    <p><span>立即学习</span>“<a href="https://pan.quark.cn/s/7fc7563c4182" style="text-decoration: underline !important; color: blue; font-weight: bolder;" rel="nofollow" target="_blank">PHP免费学习笔记(深入)</a>”;</p><p class="aritcle_card flexRow">
    <p class="artcardd flexRow">
    <a class="aritcle_card_img" href="/xiazai/gongju/2229" title="PHP 8.5.5"><img
    src="https://img.php.cn/upload/manual/001/246/273/6a03d2f895963707.jpeg" alt="PHP 8.5.5" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
    <p class="aritcle_card_info flexColumn">
    <a href="/xiazai/gongju/2229" title="PHP 8.5.5">PHP 8.5.5</a>
    <p>PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。</p>
    </p>
    <a href="/xiazai/gongju/2229" title="PHP 8.5.5" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a>
    </p>
    </p>{/block}
  • {block name="script"}{/block}

只有这样,子模板通过 {extend} 继承后,才能用同名 {block} 精准替换或追加。

正确复用公共结构的方式

导航栏、页脚这类内容稳定、仅局部微调的模块,推荐两种安全做法:

  • 每个模板(父模板和子模板)各自 {include} 同一份文件,避免依赖继承
  • 若需定制,让公共片段自身支持 {block},再让布局模板继承它(例如:header.html → layout.html → 子模板),形成明确的、单向的继承层级

混用 {include}{extend} 去“动态组装”可继承结构,只会导致行为不可控、调试困难。

文章来自机圈观察员网,发布者:,转载请注明出处:https://www.jqgcy.com/xinjizixun/124056.html

C++如何使用std::to?chars进行固定精度的浮点数格式化
上一篇 2026-07-01 16:52
怎样在ThinkPHP中实现数据库连接池优化【优化】
下一篇 2026-07-01 16:52

相关推荐