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


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';
}
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
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'obtient systèmatiquement le message "Cette url n'est pas valide" lorsque je soumet le formulaire

J'insère des var_dump pour voir ce qu'il en est. Voic la trace :


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)
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.
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.