Symfony2: как сделать имя пользователя FOSUserBundle уникальным - PullRequest
4 голосов
/ 05 января 2012

Привет, у меня есть свой собственный класс User, который наследует FOS\UserBundle\Entity\User. Кроме того, я написал свою собственную процедуру регистрации. Теперь у меня проблема в том, что форма не гарантирует, что имя пользователя уникально. Я всегда получаю SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'myusername' for key 'UNIQ_2DA1797792FC23A8'

Я попытался добавить аннотацию @UniqueEntity("email"), как указано в документации [1], но безрезультатно.

Кто-то знает, что может быть не так?

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

Ответы [ 3 ]

12 голосов
/ 30 апреля 2013

Если вы используете пакет fos_user, вы можете просто использовать ограничение UniqueEntity: http://symfony.com/doc/2.0/reference/constraints/UniqueEntity.html.

Чтобы реализовать его, просто убедитесь, что ваш класс User содержит правильные операторы использования, а затем аннотации, например, (при условии, что вы используете аннотации):

<?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
{ /* ... */ }
10 голосов
/ 05 января 2012

Ограничение уже существует в пакете FOS.Возможно, вам нужно установить validation_groups в вашей форме на array('Registration').

0 голосов
/ 08 июля 2012

Вы можете попробовать это на validation.yml с проверкой вашей сущности пользователя:

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