如何覆盖 FOS 用户捆绑表单标签
Posted
技术标签:
【中文标题】如何覆盖 FOS 用户捆绑表单标签【英文标题】:How to overwrite FOS user bundle form labels 【发布时间】:2012-11-08 12:39:46 【问题描述】:我很难覆盖 Symfony2 的 FOS 用户包使用的标签。
我已经覆盖了 Form 类,但是没有像“setOption”这样的元素的选项,只有 getters。
我可以删除一个元素,然后用适当的标签再次添加它,但这似乎有点过头了。有没有什么好的方法可以覆盖表单元素上的选项,或者只是翻译键?
【问题讨论】:
【参考方案1】:如前所述,您可以将翻译文件放入:app/Resources/translations
但是,如果您在父包 (src/MyAppBundle/Resources/translations
) 或任何其他包中覆盖它,请确保在您的内核中被覆盖的包之后加载您的包:
public function registerBundles()
$bundles = [
...
new FOS\UserBundle\FOSUserBundle(),
new MyAppBundle\MyAppBundle(),
...
];
...
【讨论】:
【参考方案2】:您不需要覆盖表单类。
复制/粘贴vendor/friendsofsymfony/user-bundle/FOS/UserBundle/Resources/translations/FOSUserBundle.xx.yml
文件到您的app/Resources/translations
目录(具有相同的目录结构和相同的文件名)并重新定义翻译以方便您。
edit:正如@mario-johnathan 所说,覆盖翻译不是包继承的一部分。官方文档见http://symfony.com/doc/current/cookbook/bundles/override.html#translations
【讨论】:
实际上我必须将它复制到 app/Resources/FOSUserBundle/translation 而不是我的捆绑目录才能使其工作, 请注意,您必须在框架的config.yml
中启用翻译才能使其正常工作,即:framework: translate: fallback: "%locale"
请注意,如果您更改了缓存,则需要清除缓存(php app/console cache:clear)以重新加载翻译。
我使用的是 SF2.8,放置文件的正确路径是 app/Resources/translations/FOSUserBundle.xx.yml
@MarioJohnathan 谢谢!有效!以上是关于如何覆盖 FOS 用户捆绑表单标签的主要内容,如果未能解决你的问题,请参考以下文章
Symfony 2 FOS 用户捆绑引导模式 AJAX 登录