You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Symfony+Bolt CMS中Twig多路径配置失效,如何同时加载两类模板?

解决Symfony 5.4 + Bolt CMS中Twig模板共存问题

问题根源

你的twig.yaml配置存在两个关键问题:

  • 重复配置了Bolt核心模板路径(vendor/bolt/core/templates),一个带别名bolt,一个为空别名,导致模板查找优先级混乱
  • 自定义模板路径(src/templates)设置了别名templates,直接使用myplace/index.html.twig时,Twig不会自动去该路径查找,需指定别名前缀(如templates/myplace/index.html.twig),但这会和Bolt模板调用逻辑冲突

修正后的配置方案

调整twig.yaml的paths节点,明确模板查找优先级,同时保留自定义模板与Bolt默认模板的可访问性:

twig:
    ...
    paths:
        # 自定义模板路径:设为空别名(根路径),优先查找
        '%kernel.project_dir%/src/templates': ''
        # 主题模板路径:保留别名theme,通过theme::xxx调用
        '%kernel.project_dir%/public/theme/%bolt.theme%': 'theme'
        # Bolt核心模板路径:设为空别名作为 fallback,自定义模板不存在时自动使用
        '%kernel.project_dir%/vendor/bolt/core/templates': ''

配置说明与使用方式

  • 自定义模板调用:确保自定义模板文件放在src/templates/myplace/index.html.twig,控制器中直接使用$this->render('myplace/index.html.twig')即可加载
  • Bolt默认模板调用:如果自定义模板目录中没有对应文件,Twig会自动查找Bolt核心模板;若需强制调用Bolt模板,可使用别名前缀bolt::(需将Bolt路径配置改为带别名bolt,见下方备选配置)

备选配置(区分模板来源)

如果需要明确区分自定义模板与Bolt模板,避免同名覆盖,可给Bolt模板保留别名:

twig:
    ...
    paths:
        '%kernel.project_dir%/src/templates': ''
        '%kernel.project_dir%/public/theme/%bolt.theme%': 'theme'
        '%kernel.project_dir%/vendor/bolt/core/templates': 'bolt'

此时:

  • 自定义模板直接用myplace/index.html.twig调用
  • Bolt模板需用bolt::default/index.html.twig格式调用

验证要点

  1. 检查自定义模板文件路径是否与调用路径匹配(如myplace/index.html.twig对应src/templates/myplace/index.html.twig)
  2. 确保没有重复配置相同的模板路径,避免优先级冲突

内容的提问来源于stack exchange,提问作者Mayor of the Plattenbaus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 05:35:21