Pourquoi mon Symfony2 @UniqueEntity contrainte de ne pas travailler du tout?
J'ai l'entité suivante classe dans mon application:
<?php
namespace ...;
//use ...
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;;
//...
/**
* @ORM\Table(name="sc_user")
* @ORM\Entity(repositoryClass="...\UserRepository")
* @ORM\HasLifecycleCallbacks()
* @UniqueEntity(fields={"email", "username"})
*/
class User implements UserInterface, \Serializable, EquatableInterface
{
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string $email
*
* @ORM\Column(name="email", type="string", length=255, unique=true)
*
* @Assert\NotBlank(groups={"registration"})
* @Assert\Email(groups={"registration"})
*/
private $email;
/**
* @var string $username
*
* @ORM\Column(name="username", type="string", length=32, unique=true)
*
* @Assert\NotBlank(groups={"registration"})
*/
private $username;
//...
}
L' @UniqueEntity contrainte est d'être ignoré. J'ai essayé différentes saveurs, dont:
@UniqueEntity(fields={"email", "username"})
et
@UniqueEntity(fields={"email"})
@UniqueEntity(fields={"username"})
et, par la Symfony2 documentation ici: http://symfony.com/doc/current/reference/constraints/UniqueEntity.html
@UniqueEntity("email")
@UniqueEntity("username")
Rien je ne, travaux. Au lieu d'obtenir une erreur de validation de formulaire comme prévu, je suis l'exception suivante:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry
'[email protected]' for key 'UNIQ_D8183973E7927C74'
C'est tout simplement faux! Quelqu'un sait-il comment résoudre ce problème?
OriginalL'auteur josef.van.niekerk | 2012-08-17
Vous devez vous connecter pour publier un commentaire.
Le problème a été résolu comme suit:
L'enregistrement des groupes ont disparu, et j'avais besoin de les séparer en deux annotations.
Salut à Josef, semble être un peu une vieille question, mais je vais avoir le même problème que vous avais - je me demandais, avez - vous besoin de le faire, je ne sais pas, créer la validation en groupe quelque part? J'ai ajouté de l'entité unique champ exactement comme vous l'avez fait, uniquement sur téléphone et courriel, mais c'est encore de me donner une exception au lieu d'une erreur de validation. Des idées?
vous devez déclarer le groupe de validation de votre
setDefaultOptions
méthode dans votreFormType
Pourquoi est-ce une solution différente de ce qui est indiqué sur la documentation? La documentation est mauvais, ou est-ce la mise en œuvre significativement différentes de celles de la documentation exemple?symfony.com/doc/2.3/reference/constraints/UniqueEntity.html
En effet, il ne fonctionne pas si pas séparés, merci
OriginalL'auteur josef.van.niekerk
Une autre raison de ce problème est que si vous êtes en utilisant le formulaire de collections et d'inclure un sous-formulaire qui gère une entité associée, vous devez définir
cascade_validation
àtrue
dans la racine et tous les sous-formulaires.Voir l'indication dans le Documentation Symfony:
Mise à jour:
Pour s'assurer que votre enfant entités sont validés il y a même une meilleure façon. Symfony fournit les
Valid
contrainte exactement pour cette raison. De la documentation:OriginalL'auteur naitsirch
Veuillez noter ignoreNull
Par exemple pour fonctionner correctement avec le pid (peut être null):
OriginalL'auteur nvvetal
Essayez d'ajouter
à votre configuration de l'application
OriginalL'auteur AdrienBrault