Bonjour
Je rencontre un petit problème avec les validateurs personnalisés.
J'ai un champs qui doit recevoir une url où la valeur "CD".
Pour valider ce champs je crée un validateur personnalisé que j'appelle MyUrl: <lien url="http://symfony.com/doc/current/cookbook/validation/custom_constraint.html">http://symfony.com/doc/current/cookbook/validation/custom_constraint.html</lien>
Voici mon code
MyUrl.php
Et le validator MyUrlValidator.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 <?php namespace Dosicalu\PedagicielBundle\Constraint; use Symfony\Component\Validator\Constraint; /** * @Annotation */ class MyUrl extends Constraint { public $message = 'Cette url n\'est pas valide'; }
J'obtient systèmatiquement le message "Cette url n'est pas valide" lorsque je soumet le formulaire
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
26 <?php namespace Dosicalu\PedagicielBundle\Constraint; use Symfony\Component\Validator\Constraint; use Symfony\Component\Validator\ConstraintValidator; class MyUrlValidator extends ConstraintValidator { public function isValid($value, Constraint $constraint) { $pattern = '#^((https?|ftp)://.*|CD)#'; var_dump($constraint); var_dump($value); if (!preg_match($pattern, $value)) { $this->setMessage($constraint->message); return false; } return true; } }
J'insère des var_dump pour voir ce qu'il en est. Voic la trace :
Quelques petites précision : mon champ url est lié à l'Entité Logiciel, et 'cd' est une valeur non valide qui était présente dans la base avant que je mette en place le validateur. <lien>http://toto.fr</lien> est la valeur que j'ai renseigné dans le champs.
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 object(Dosicalu\PedagicielBundle\Constraint\MyUrl)[45] public 'message' => string 'Cette url n'est pas valide' (length=26) public 'groups' => array 0 => string 'Default' (length=7) 1 => string 'Logiciel' (length=8) string 'cd' (length=2) object(Dosicalu\PedagicielBundle\Constraint\MyUrl)[45] public 'message' => string 'Cette url n'est pas valide' (length=26) public 'groups' => array 0 => string 'Default' (length=7) 1 => string 'Logiciel' (length=8) string 'http://toto.fr' (length=14)
De plus je n'utilise pas dans mon code les validation_groups.
Comment ce fait-il que j'ai 2 groupes dont un avec le nom de l'entité ?
Est-ce quelqu'un voit d'où peut venir le problème parce que là... je sèche.
Partager