IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

[Validator] Aucune remontée d'erreurs [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 397
    Points : 133
    Points
    133
    Par défaut [Validator] Aucune remontée d'erreurs
    Bonjour,

    Pourquoi la validation de cette classe ne fonctionne pas ?
    À noter que j'utilise juste le package validator (v2.1.0) en standalone (en dehors de Symfony).

    Voici ce que j'ai fait.

    Autoload
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    require_once 'Symfony/Component/ClassLoader/UniversalClassLoader.php';
     
    use Symfony\Component\ClassLoader\UniversalClassLoader;
    $loader = new UniversalClassLoader();
    $loader->registerNamespace('Symfony', __DIR__ . '/');
    $loader->register();
     
    use Symfony\Component\Validator\Validator;
    use Symfony\Component\Validator\Mapping\ClassMetadataFactory;
    use Symfony\Component\Validator\Mapping\Loader\StaticMethodLoader;
    use Symfony\Component\Validator\Constraints as Assert;
    use Symfony\Component\Validator\ConstraintValidatorFactory;
    Classe de test avec @Assert
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    class Author
    {
     
        /**
         * @Assert\NotBlank()
         * @Assert\MinLength(3)
         */
        public $name;
     
    }
     
    $author = new Author();
    Validation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $validator = new Validator(
        new ClassMetadataFactory(new StaticMethodLoader()),
        new ConstraintValidatorFactory()
    );
    $errors = $validator->validate($author);
     
    if (count($errors) > 0) {
        var_dump($errors);
    } else {
        echo 'The author is valid! Yes!';
    }
     
    var_dump($author, $errors);
    Résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    The author is valid! Yes!
    object(Author)[2]
      public 'name' => null
    object(Symfony\Component\Validator\ConstraintViolationList)[12]
      protected 'violations' => 
        array
          empty
    Merci

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    faut pas mettre le StaticMethodLoader mais le AnnotationLoader

  3. #3
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 397
    Points : 133
    Points
    133
    Par défaut
    D'accord merci.

    J'ai récupéré le package doctrine-common et modifié par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $validator = new Validator(
        new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader())),
        new ConstraintValidatorFactory()
    );
    Voici la nouvelle erreur :

    Fatal error: Uncaught exception 'Doctrine\Common\Annotations\AnnotationException' with message '[Semantical Error] The annotation "@Symfony\Component\Validator\Constraints\NotBlank" in property Author::$name does not exist, or could not be auto-loaded.'
    Un problème de package manquant ou d'inclusion ?

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    rajoute

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    AnnotationRegistry::registerLoader(function($class) use ($loader) {
        $loader->loadClass($class);
        return class_exists($class, false);
    });

  5. #5
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 397
    Points : 133
    Points
    133
    Par défaut
    C'est parfait, je te remercie pour ta rapidité.

  6. #6
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 397
    Points : 133
    Points
    133
    Par défaut
    OK, si je dois traiter le retour manuellement c'est difficilement exploitable ?

    Comment ça marche dans le framework, c'est automatisé ?

    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
    Symfony\Component\Validator\ConstraintViolationList Object
    (
        [violations:protected] => Array
            (
                [0] => Symfony\Component\Validator\ConstraintViolation Object
                    (
                        [messageTemplate:protected] => This value should not be blank.
                        [messageParameters:protected] => Array
                            (
                            )
     
                        [messagePluralization:protected] => 
                        [root:protected] => Author Object
                            (
                                [name] => 
                            )
     
                        [propertyPath:protected] => name
                        [invalidValue:protected] => 
                        [code:protected] => 
                    )
     
            )
     
    )

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    juste comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach ($errors as $error) {
        echo vsprintf($error->getMessageTemplate(), $error->getMessageParameters());
    }

  8. #8
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 397
    Points : 133
    Points
    133
    Par défaut
    Merci beaucoup je vois le principe.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Exceptions] Remontée d'erreurs
    Par tatemilio2 dans le forum Services Web
    Réponses: 5
    Dernier message: 31/08/2006, 15h22
  2. remontée des erreurs
    Par loup_precaire dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 30/08/2006, 10h12
  3. Flux RSS valide mais contient des erreurs
    Par maximenet dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 24/04/2006, 23h13
  4. [Struts Validator] probleme affichage des erreurs
    Par Morpheus2144 dans le forum Struts 1
    Réponses: 7
    Dernier message: 24/01/2006, 15h25
  5. validation w3c et javascript: erreur?
    Par stoyak dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/08/2005, 14h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo