更新后FOSUserBundle模板覆盖失效问题求助
遇到这种情况确实闹心,之前好好的功能,更新完依赖就罢工了。结合你用的是dev-master开发分支(这个分支本身就容易有变动),给你几个排查和解决的方向:
检查模板路径是否匹配最新分支的结构
dev-master作为开发分支,可能最近的更新调整了Bundle内部的模板目录结构。比如之前你覆盖的Security/login.html.twig,现在Bundle里的模板可能换了路径或者命名?你要确保自己的自定义模板路径和FOSUserBundle当前的模板路径完全对应——举个例子,如果Bundle现在把登录模板放在Resources/views/Security/login.html.twig,那你的覆盖模板就得放在templates/bundles/FOSUserBundle/Security/login.html.twig(Symfony 4+版本)或者app/Resources/FOSUserBundle/views/Security/login.html.twig(旧版本),路径丝毫不差才行。强制清除缓存
更新依赖后,缓存里很可能还存着旧的模板映射关系,哪怕你没改代码也会出问题。直接运行命令清缓存:# 开发环境 php bin/console cache:clear # 生产环境 php bin/console cache:clear --env=prod清完之后再试试,很多时候这个步骤就能解决问题。
确认FOSUserBundle的版本变动
dev-master分支的代码一直在迭代,可能最近的commit修改了模板加载逻辑——比如调整了Twig模板的优先级、改用了新的命名空间规则。你可以打开composer.lock文件,找到FOSUserBundle的条目,对比更新前后的版本哈希值,然后去看这个分支的提交记录,有没有和模板覆盖相关的改动。检查Twig模板路径配置
虽然你说没改代码,但有时候composer更新可能间接影响配置(比如某些依赖的默认配置变化)。打开config/packages/twig.yaml,确认有没有正确配置FOSUserBundle的模板路径:twig: paths: '%kernel.project_dir%/templates/bundles/FOSUserBundle': FOSUser这个配置是让Twig优先加载你自定义目录下的模板,要是配置丢了或者路径错了,自然会加载Bundle默认模板。
调试模板来源
你可以在页面里临时加一行调试代码,看看实际加载的是哪个模板:{{ _self.getTemplateName() }}刷新页面后,就能看到当前模板的完整路径,如果显示的是vendor目录里的FOSUserBundle模板,那说明你的自定义模板路径肯定有问题;如果显示的是你的自定义路径但内容不对,那可能是模板文件本身被意外覆盖了?
内容的提问来源于stack exchange,提问作者whitebear

