表单中的唯一实体


FOS UniqueEntity in form

我使用FOS并构建了自己的表单来创建用户。我有问题,检测重复的用户名和电子邮件。

use Symfony'Bridge'Doctrine'Validator'Constraints'UniqueEntity;
/**
 * @ORM'Entity
 * @ORM'Table(name="fos_user")
  @UniqueEntity(
 *     fields={"email"},
 *     message="Your E-Mail adress has already been registered"
 * )
 */
class User extends BaseUser
{
    /**
     * @ORM'Id
     * @ORM'Column(type="integer")
     * @ORM'GeneratedValue(strategy="AUTO")
     */
    protected $id;
    public function __construct()
    {
        parent::__construct();
        // your own logic
    }
}

和什么都没有。我明白了:

SQLSTATE[23000]: Integrity constraint violation: 1062'test' for key 'UNIQ_957A647992FC23A8'

我更喜欢错误信息。我尝试:Symfony 2 -设置UniqueEntity消息

实际上FOS模型用户已经对用户名和电子邮件具有唯一的实体约束。请确保表单的validation_groups设置为"Registration"或"Profile"。

/**
 * @param OptionsResolverInterface $resolver
 */
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'data_class'        => 'AppBundle'Entity'User',
        'validation_groups' => array('Registration', 'Default'),
    ));
}

或者您可以使用"emailCanonical"字段设置自己的唯一约束。

* @UniqueEntity(fields="emailCanonical", errorPath="email", message="Your E-Mail adress has already been registered")