Symfony - FOSUserBundle注册验证不起作用


Symfony - FOSUserBundle registration validation not working

我使用FOSUserBundle,我试图验证电子邮件和用户名,如果他们已经存在或不存在。否则我得到MySQL重复输入错误。

我扩展了注册表单,添加了Registration验证组。但是还是不行,我总是得到重复输入错误。

这是我的RegistrationType课程:

class RegistrationType extends BaseType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        parent::buildForm($builder, $options);
    }
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            "data_class" => "Tsk'FEBundle'Entity'User",
            "validation_groups" => array("Registration")
        ));
    }
    public function getName()
    {
        return "tsk_fe_registration_form_type";
    }
}

和服务定义:

<parameters>
    <parameter key="tsk_fe.registration.form.type.class">Tsk'FEBundle'Form'RegistrationType</parameter>
</parameters>
<services>
    <service id="tsk_fe.registration.form.type" class="%tsk_fe.registration.form.type.class%">
        <tag name="form.type" alias="tsk_fe_registration_form_type"/>
        <argument>%fos_user.model.user.class%</argument>
    </service>
</services>

In config.yml:

fos_user:
    db_driver: orm
    firewall_name: main
    user_class: Tsk'FEBundle'Entity'User
    registration:
            form:
                type: tsk_fe_registration_form_type

最后我的User实体:

/**
 * @ORM'Entity
 * @ORM'Table(name="fos_user")
 * @ORM'HasLifecycleCallbacks
 */
class User extends BaseUser
{
    /**
     * @ORM'Id
     * @ORM'Column(type="integer")
     * @ORM'GeneratedValue(strategy="AUTO")
     */
    protected $id;
    public function __construct()
    {
        parent::__construct();
    }
    //..
}

问题是symfony 2.5验证,更改config.yml从

framework:
    validation:      { enable_annotations: true }

framework:
    validation:
        enable_annotations: true
        enabled: true
        api: 2.4

,它会工作,它帮助了我

在symfony 2.5.0中,验证API发生了变化,现在不加载特定于存储的验证。要么降级到最新的2.4版本,要么只是作为解决方案,将唯一的约束复制到您的实体:

use Symfony'Bridge'Doctrine'Validator'Constraints'UniqueEntity;
/**
 * @ORM'Entity
 * @ORM'Table(name="fos_user")
 * @ORM'HasLifecycleCallbacks
 * 
 * @UniqueEntity(fields="usernameCanonical", errorPath="username", message="fos_user.username.already_used", groups={"Registration", "Profile"})
 * @UniqueEntity(fields="emailCanonical", errorPath="email", message="fos_user.email.already_used", groups={"Registration", "Profile"})
 */
class User extends BaseUser
{
    // your stuff
}

我也遇到了同样的问题,直到我阅读了这里的升级文档https://github.com/symfony/symfony/blob/master/UPGRADE-2.5.md

我在配置中显式地将我的验证器enabled设置为true,清除了我的缓存,这解决了问题:

之前
framework:
    validation:      { enable_annotations: true }

framework:
    validation:      { enabled: true, enable_annotations: true }

另外,请确保在实体上同时设置usernameCononical和emailCononical,因为这是约束所反对的。

或者在降级Symfony之前,您可以尝试在config.yml:

中设置validation api
 framework: 
    validation: 
       enabled: true 
       api: auto

可以处理向后验证。Symfony 2.5中ValidatorConstraint的问题