如何覆盖 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 登录

FOS 捆绑包 - 如何选择具有特定角色的用户?

如何覆盖 django-redux 默认用户注册表单

FOS 捆绑用户 - 多个角色

无法解析 symfony 4.3 中覆盖 FOS 控制器的参数 $token

自 Symfony2 更新到 2.8 以来覆盖注册表单(SonataUserBundle)