Bonjour à tous,
Débutant dans Symfony2, j'ai un problème sur les annotations personnalisées dans un formulaire imbriqué afin de tester la validité d'un champs "telephone".
Code du validator :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 <?php // src/MonSite/SiteBundle/Validator/FormatTelephoneValidator.php namespace MonSite\SiteBundle\Validator; use Symfony\Component\Validator\Constraint; use Symfony\Component\Validator\ConstraintValidator; class FormatTelephoneValidator extends ConstraintValidator { public function validate($value, Constraint $constraint) { $mavalue = explode("+33",$value); if (strstr($value,'+33')=="") { $this->context->addViolation($constraint->message, array('%string%' => "+33 manquant")); } //else...... Suite du code } }Dans ma première entity Demande :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <?php // src/MonSite/SiteBundle/Validator/FormatTelephone.php namespace MonSite\SiteBundle\Validator; use Symfony\Component\Validator\Constraint; /** * @Annotation */ class FormatTelephone extends Constraint { public $message = 'Erreur sur le format de téléphone : %string%'; }
Dans ma deuxième entity Users contenant le champs telephone :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 /** * MonSite\SiteBundle\Entity\Demande * * @ORM\Table() * @ORM\Entity(repositoryClass="MonSite\SiteBundle\Entity\DemandeRepository") * @ORM\HasLifecycleCallbacks() */ class Demande { //mes attributs... public function __construct() { $this->users = new Users(); } }
Dans mon DemandeType :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 use MonSite\SiteBundle\Validator\FormatTelephone; use MonSite\SiteBundle\Validator\FormatTelephoneValidator; /** * Users * * @ORM\Table() * @ORM\Entity(repositoryClass="MonSite\SiteBundle\Entity\UsersRepository") * @ORM\HasLifecycleCallbacks() */ class Users { /** * @var integer $telephone * * @ORM\Column(name="telephone", type="text") * @FormatTelephone() */ private $telephone; public function __construct() { $this->telephone = "+33"; } }
Dans mon UsersType :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 class DemandeType extends AbstractType { /** * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('objet','text') ->add('users', new UsersType()) ; } }
Dans mon controleur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 use MonSite\SiteBundle\Validator\FormatTelephone; use MonSite\SiteBundle\Validator\FormatTelephoneValidator; class UsersType extends AbstractType { /** * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('nom','text') ->add('prenom','text') ->add('telephone','text') ; } }
Cela fonctionnait dans un formulaire simple, mais maintenant que je suis passé en formulaire imbriqué cela ne fonctionne plus...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 if ($form->isValid()) { $em = $this->getDoctrine()->getManager(); $em->persist($demande); $em->persist($demande->getUsers()); $em->flush(); //......le reste du code }
Depuis plusieurs jours j'essaie de trouver d'où vient mon problème, j'ai essayé d'autres méthodes mais je n'y suis pas arrivé.
Merci pour votre aide.
Partager