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());
}