您好,我有自己的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
答案 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.'