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

Zend_Form PHP Discussion :

[Zend_Form] Bonne pratique avec validateurs spécifiques


Sujet :

Zend_Form PHP

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut [Zend_Form] Bonne pratique avec validateurs spécifiques
    Bonjour,

    Je souhaiterai connaître votre manière de traiter certains validateurs de formulaire.
    Un exemple tout simple : si une case à cocher est cochée, alors tel champ devient obligatoire.
    Comment gérez-vous cela ? Au moyen d’un Zend_Validate personnalisé ?
    Ou encore un autre exemple, auquel je suis confronté, lorsqu’on ajoute un administrateur, les champs mot de passe et mot de passe confirmation sont obligatoire (de plus la saisie doit être identique).
    Tandis qu’à la modification, ces 2 champs ne sont plus obligatoires, sauf que s’il en saisie un, il faut réactiver le validateur d’égalité des 2 champs. Vous me suivez ?
    Et encore, on peut avoir des cas bien plus complexe.

    Le problème que je vois avec les Zend_Validate c’est que dans des cas de formulaire très particulier, les validateurs crées ne seront probablement jamais réutilisés.
    Qu’est ce que vous conseillez ?

    Merci d’avance.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 98
    Points : 93
    Points
    93
    Par défaut
    Bonjour jbarthe,

    J'ai été confronté au même problème que toi.
    Le gros soucis, c'est que les validateurs de form sont créé à l'instanciation de cette dernière. Il est donc très dur de lui indiquer les dépendences entre différents champs.
    C'est pour cela que dans mon cas, j'utilise les validateurs de form juste pour vérifier la pertinence de chaque champ indépendemment et que j'ajoute après cette première validation des tests en fonction des dépendences de chacun des champs.

    exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public function registerAction() {
      $form = new My_Form_Register();
      if($this->getRequest()->isPost() && $form->isValid($this->getRequest()->getPost()) {
        if($form->password == $form->confirmation) {
          // Registration
        }
        else {
          $this->view->errorMessage = 'Vos mots de passe ne correspondent pas'
        }
      }
      ....
    }
    Maintenant, si quelqu'un a une solution où toute la validation se fait dans la form même, je suis prenneur. En attendant, de mon côté, j'ai tjrs pas trouvé...

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Il suffit de passer au valideur la valeur du champ à comparer si le form est soumis (isPost()).
    Voir ce post.

  4. #4
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,
    Citation Envoyé par jbarthe Voir le message
    Le problème que je vois avec les Zend_Validate c’est que dans des cas de formulaire très particulier, les validateurs crées ne seront probablement jamais réutilisés.
    Le gros avantage de passer par un Zend_Validate spécialisé, qui surpasse largement le fait qu'il est peu probable qu'il soit réutilisé, est que ça allège au maximum le code du contrôleur et qu'on bénéficie en plus de tous les mécanismes qui vont avec comme la chaîne de validation, la gestion automatique et centralisée des messages d'erreur, etc.

    Pour les validations portant sur plusieurs champs du formulaire, rien de plus simple : il suffit de créer une méthode isValid() prenant en second paramètre une variable tableau associatif $context qui contient tous les champs remontés :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class My_Validate extends Zend_Validate_Abstract
    {
       ...
       public function isValid($value, $context = null)
       {
          ...
       }
    }
    $context est passé au validateur par Zend_Form_Element::isValid() lors de la validation du formulaire.

    Pour donner un exemple de cas d'utilisation, j'ai utilisé cette méthode pour créer un validateur permettant de vérifier la validité d'un numéro de sécurité sociale par rapport à une clé saisie dans le même formulaire.
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Citation Envoyé par GrandFather Voir le message
    $context est passé au validateur par Zend_Form_Element::isValid() lors de la validation du formulaire.
    Bien vu
    Je n'avais pas assez fouillé la doc pour voir ceci.
    La méthode que je préconise est meilleure seulement si l'on souhaite un valideur plus général (= sans connaître l'id du champ). Dans le cas d'une comparaison de date, il suffit alors d'indiquer la valeur du 1er champ + le critère de comparaison (<, <=, =, >=, >) et le valideur fait le travail quels que soient les id des champs.

Discussions similaires

  1. Question générale sur les bonnes pratiques avec Java
    Par Teovald dans le forum Langage
    Réponses: 8
    Dernier message: 15/03/2011, 17h32
  2. Quelles sont les bonnes pratiques avec Zend Framework ?
    Par Community Management dans le forum Zend Framework
    Réponses: 14
    Dernier message: 02/02/2009, 20h35
  3. [Débutant] Bonnes pratiques avec les exceptions
    Par scougirou dans le forum Langage
    Réponses: 1
    Dernier message: 08/08/2007, 19h18
  4. [log4j][débutant] Bonnes pratiques avec les threads ?
    Par scougirou dans le forum Logging
    Réponses: 1
    Dernier message: 13/07/2007, 16h27

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