Twig中引入子模板主要用{% include %}标签,支持变量传递、动态路径、ignore missing容错及多路径回退,适用于复用简单UI片段,避免复杂逻辑和过度嵌套。

Twig 中引入子模板主要用 {% include %} 标签,它不涉及继承关系,而是把另一个模板文件的内容“嵌入”到当前模板的指定位置,适合复用页眉、页脚、表单组件等独立片段。
基础写法与变量传递
最简单的写法是直接包含一个模板:
-
{% include 'header.html.twig' %}—— 模板内所有变量(如user、title)默认可被子模板访问 - 若只需传部分变量,加
only关键字:{% include 'card.html.twig' with {'product': item} only %},此时card.html.twig只能访问product,无法读取当前模板其他变量 - 支持动态路径,比如按类型加载不同模板:
{% include type == 'blog' ? 'blog/item.html.twig' : 'news/item.html.twig' %}
安全容错与路径回退
线上环境常需避免因模板缺失导致报错:
- 加
ignore missing:当模板不存在时静默跳过,不抛异常{% include 'optional-banner.html.twig' ignore missing %} - 提供多个候选路径,Twig 自动选用第一个存在的:
{% include ['@custom/alert.html.twig', 'alert/default.html.twig'] %}
实际使用建议
子模板不是万能替代,要注意适用边界:
- 适合结构固定、逻辑简单、复用率高的 UI 片段(如按钮、分页栏、评论项)
- 避免在
include模板里写复杂业务判断——逻辑应前置到控制器或服务层 - 大量嵌套
include可能影响性能,必要时启用 Twig 缓存:'cache' => __DIR__.'/var/cache/twig' - 若片段需高度定制(如带回调、状态管理),优先考虑宏(
{% macro %})而非 include


















