【问题标题】:userCanonical validation near label username with FOSUserBundle and Symfony2使用 FOSUserBundle 和 Symfony2 在标签用户名附近进行 userCanonical 验证
【发布时间】:2012-02-08 20:35:59
【问题描述】:

我正在使用 Symfony2 和 FOSUserBundle。

如果我在注册表中输入用户名或电子邮件地址,而该注册表已在数据库中,则会在注册表顶部显示错误。

如何将错误消息放到用户名/电子邮件字段中?

【问题讨论】:

    标签: forms symfony fosuserbundle


    【解决方案1】:

    阅读文档 Rendering each Field by Hand

    {{form_errors(form.username)}}
    {{form_errors(form.)}}
    

    或创建您的表单主题 Global Form Theming

    【讨论】:

    • 消息来自FOSUserBundle中的validation.xml:<constraint name="FOS\UserBundle\Validator\Unique"> <option name="property">usernameCanonical</option> <option name="message">The username is already used</option> <option name="groups"> <value>Registration</value> <value>Profile</value> </option> </constraint> 但是注册表单没有呈现usernameCanonical字段。所以错误消息不绑定到任何字段。如何在用户名字段中显示此错误消息?
    • @user1198193 我使用 {{ form_errors(form) }} 并覆盖我的 UserBundle 中的错误消息。
    • 问题是,来自 FOSUserBundle 约束的消息是全局类错误消息,而不是属性约束。是否可以配置约束或者我必须将约束从类约束修改为属性约束?
    【解决方案2】:

    如果您将 FOSUserBundle 设置为包的父级:

    // src/Acme/UserBundle/AcmeUserBundle.php
    
    <?php
    
    namespace Acme\UserBundle;
    
    use Symfony\Component\HttpKernel\Bundle\Bundle;
    
    class AcmeUserBundle extends Bundle
    {
        public function getParent()
        {
            return 'FOSUserBundle';
        }
    }
    

    然后你可以将自己的validation.yml文件放在config文件夹中,你可以像这样设置唯一约束的errorPath属性:

    #validation.yml:
    Acme\DemoBundle\Entity\User:      # your user entity
    constraints:
        - Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity: { fields: usernameCanonical, errorPath: username, groups: [CustomRegistration, Default] }
    

    确保将 errorPath 设置为表单上的实际字段名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-14
      • 2013-09-02
      • 2013-09-14
      • 1970-01-01
      • 2013-01-24
      • 2013-02-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多