Symfony2:如何使FOSUserBundle用户的用户名唯一

时间:2012-01-05 14:25:26

标签: symfony fosuserbundle

您好,我有自己的User班级,继承FOS\UserBundle\Entity\User。另外我写了自己的注册例程。现在我遇到的问题是表单不能确保用户名是唯一的。我总是得到SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'myusername' for key 'UNIQ_2DA1797792FC23A8'

我尝试添加文档[1]中所述的@UniqueEntity("email")注释,但没有任何效果。

有人知道可能出现什么问题吗?

[1] http://symfony.com/doc/current/reference/constraints/UniqueEntity.html

3 个答案:

答案 0 :(得分:12)

如果您正在使用fos_user软件包,则只​​需使用UniqueEntity约束:http://symfony.com/doc/2.0/reference/constraints/UniqueEntity.html

要实现它,只需确保您的User类保留正确的use语句,然后确保注释,就像这样(假设您正在使用注释):

<?php
// ...
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;

/**
 * @ORM\Entity
 * @ORM\Table(name="fos_user")
 * @UniqueEntity("email")
 * @UniqueEntity("username")
*/
class User extends BaseUser
{ /* ... */ }

答案 1 :(得分:10)

该约束已存在于FOS包中。您可能需要将表单上的validation_groups选项设置为array('Registration')

答案 2 :(得分:0)

您可以使用您的用户实体验证在validation.yml上尝试此操作:

constraints:    
    - FOS\UserBundle\Validator\Unique:
        property: usernameCanonical
        message:  'This username already exists. Please choose another one.'