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格式调用
验证要点
- 检查自定义模板文件路径是否与调用路径匹配(如
myplace/index.html.twig对应src/templates/myplace/index.html.twig) - 确保没有重复配置相同的模板路径,避免优先级冲突
内容的提问来源于stack exchange,提问作者Mayor of the Plattenbaus
相关产品推荐
相关产品推荐

