![](/img/trans.png)
[英]Symfony2 FOSUserBundle disable both, email confirmation and user on registration
[英]Symfony2: FOSUserBundle - SQLSTATE[23505]: Unique violation: during user registration
如何在插入之前驗證用戶名和郵件是否已存在於我的數據庫中。
我嘗試使用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;
在我的控制器內部:
if ($form->isValid()) {
if($userManager->findUserByUsername($user->getUsername()) != 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é !';
}
}
當我嘗試使用已存在的用戶名將用戶保存到數據庫時,出現此錯誤/異常:
執行'INSERT INTO utilisateurPortail(用戶名、username_canonical、電子郵件、email_canonical、啟用、salt、密碼、last_login、鎖定、過期、expires_at、confirmation_token、password_requested_at、roles、credentials_expired、credentials_expire_at、id、raisonsociale、函數,envoiSMS,電話,premiere_connexion) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)' 與參數 ["dd", "dd", "a@p.fr", "a@p.fr", 1, "fhaqicni2sgko4o8s4804oo8g48wcgw", "tdsZpiC1Tzbh5mAVf23uy35acc3dq5acc5acc3dq5acc5acc3dq5acc5acc3dq5acc5acc3dq5acc5acc3dq5acc5acc3dq5acc5ac3dq5acc5ac3dq5acc5acc5acc5ac3dq5acc3 ", null, 0, 0, null, null, null, "a:1:{i:0;s:16:\\"ROLE_SUPER_ADMIN\\";}", 0, null, 8, "sdfsdq", "aaa" , "aaa", "dsfvsdf", 1, "3333333333", 1]:
SQLSTATE[23505]:唯一違規:7 ERREUR:la valeur d'une clé dupliquée rompt la contrainte unique « uniq_1e48ea092fc23a8 » 詳細信息: La clé « (username_canonical)=(dd) » 存在déjà。
"username_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());
}
使用UniqueEntity
驗證約束來檢查用戶名或電子郵件是否已存在於您的數據庫中。
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.