Php Symfony2:FOSUserBundle-SQLSTATE[23505]:唯一冲突:在用户注册期间

Php Symfony2:FOSUserBundle-SQLSTATE[23505]:唯一冲突:在用户注册期间,php,forms,symfony,verification,Php,Forms,Symfony,Verification,如何在插入之前验证用户名和邮件是否已存在于我的数据库中 我尝试了isValid()方法,但不起作用 我的实体: <?php namespace Fiducial\UserBundle\Entity; use Doctrine\ORM\Mapping as ORM; use FOS\UserBundle\Model\User as BaseUser; /** * User * * @ORM\Table(name="utilisateurPortail") * @ORM\Enti

如何在插入之前验证用户名和邮件是否已存在于我的数据库中

我尝试了
isValid()
方法,但不起作用

我的实体:

 <?php

namespace Fiducial\UserBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use FOS\UserBundle\Model\User as BaseUser;

/**
 * User
 *
 * @ORM\Table(name="utilisateurPortail")
 * @ORM\Entity(repositoryClass="Fiducial\UserBundle\Repository\UtilisateurPortailRepository")
 */
class UtilisateurPortail extends BaseUser
{
    /**
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;
当我尝试使用已存在的用户名将用户保存到数据库时,出现此错误/异常:

一个 执行“插入到UsilizateUrportail”时发生异常 (用户名、用户名、电子邮件、电子邮件、已启用、salt、, 密码、上次登录、锁定、过期、过期时间、确认令牌、, 密码\u已请求\u在,角色,凭据\u已过期, 证书到期时间:身份证、raisonsociale、姓名、prenom、基金会、, 环境、电话、高级鉴定)值(?, 带参数[“dd”, “dd”a@p.fr", "a@p.fr,1,“fhaqicni2sgko4o8s4804oo8g48wcgw”, “TDSZPIC1TZBH5MAV23UYP9HNXDV39EEXZBH4/P3/DECu5z3QbqGHJjSSy6ccpir6T35rS5r043WSacBqazJNA=”, null,0,0,null,null,null,“a:1:{i:0;s:16:\'ROLE\u SUPER\u ADMIN\”;}”, 0,空,8,“sdfsdq”,“aaa”,“aaa”,“dsfvsdf”,1,“3333”,1]:

SQLSTATE[23505]:唯一冲突:7 ERREUR:la valeur d'une clé Dupliqée rompt la Contraine独特的«uniq_1e48ea092fc23a8»详细信息: La clé«(username_canonical)=(dd)»存在于déjá

使用验证约束检查数据库中是否已存在用户名或电子邮件

use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;

/**
 * @ORM\Table(name="table")
 * @ORM\Entity(repositoryClass="Fiducial\UserBundle\Repository\UtilisateurPortailRepository")
 *
 * -> Add this annotation
 *
 * @UniqueEntity(
 *     fields={"username", "email"}
 * )
 */
class UtilisateurPortail extends BaseUser
“username\u canonical”是由FOSBundle验证的用户名,因此您需要重写代码

if ($form->isValid()) {
    if($userManager->findUserByUsernameCanonical($user->getUsernameCanonical()) != null) {
        $message = 'Nom d\'utilisateur déjà utilisé';
    } elseif($userManager->findUserByEmail($user->getEmail()) != null)      {
        $message = 'Email déjà utilisé';
    } else {
        $userManager->updateUser($user);
        $message = 'Utilisateur ajouté !';
    }
 }
和功能

public function getUsernameCanonical()
{
     // Better to assign this util by __construct or as parameter to this function
     $canonicalizer = FOS\UserBundle\Util\Canonicalizer();
     return canonicalizer->canonicalize($this->getUsername());
}
public function getUsernameCanonical()
{
     // Better to assign this util by __construct or as parameter to this function
     $canonicalizer = FOS\UserBundle\Util\Canonicalizer();
     return canonicalizer->canonicalize($this->getUsername());
}