Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour et merci à cette communauté grâce à laquelle j'ai pu trouver bon nombre de solutions à mes soucis.
Aujourd'hui je fais appel à vous pour effectuer une validation de date composée de 3 champs de type select (jour, mois, et année)
J'ai bien compris comment effectuer des tests sur chaque élément grâce à $element->addValidator().
Je peux donc vérifier que les valeurs du jour, du mois et de l'année sont potentiellement bonnes, mais je ne vois aucun moyen d'effectuer une validation globale sur les 3 champs d'un coup, pour vérifier que la date dans son ensemble est correcte.
Merci de votre aide
Dernière modification par OrangeKarma (10-04-2008 17:36:27)
Hors ligne
$date = new Zend_Validate_Date(); if ($date->isValid( $year . '-' . $month . '-' . $day)) { echo 'VALID !'; } else { echo 'NON VALID !'; }
Hors ligne
Oui, d'accord.
Je vais recentrer le problème :
Pour pouvoir utiliser
apsy a écrit:
$date = new Zend_Validate_Date();
if ($date->isValid( $year . '-' . $month . '-' . $day)) {
echo 'VALID !';
} else {
echo 'NON VALID !';
}
je dois pouvoir récupérer la valeur de mes 3 champs pour les assigner à $year, $month et $day. Or, je n'arrive à récupérer la valeur de ces champs qu'une fois que le formulaire a été rendu (donc après la vérification des champs!).
exemple :
$form->addElement(new Zend_Form_Element_Text("jour")); $form->addElement(new Zend_Form_Element_Text("mois")); $form->addElement(new Zend_Form_Element_Text("annee")); Zend_Debug::dump($form->getValues(), "avant rendu : "); $form->render(); Zend_Debug::dump($form->getValues(), "après rendu : ");
produit en sorti :
avant rendu : array(3) { ["jour"] => NULL ["mois"] => NULL ["annee"] => NULL après rendu : array(3) { ["jour"] => string(2) "15" ["mois"] => string(2) "11" ["annee"] => string(4) "2008"
Suis-je passé à côté de quelquechose ? (j'en ai peur! )
Dernière modification par OrangeKarma (10-04-2008 17:09:35)
Hors ligne
Non, c'est normal
Tu recuperes tes valeurs qu'apres un $form->isValid() ou un $form->render()
Je te conseille donc de faire un isValid() puis après de tester avec le Zend_Validate_Date
Apsy
Dernière modification par apsy (10-04-2008 17:12:51)
Hors ligne
Moi j'utilise cette syntaxe :
if (!(Zend_Date::isDate($date_op,'dd MM yyyy','fr')))
Hors ligne
Effectivement. Merci de ta réponse Apsy.
Cependant je trouve cela complètement illogique : ça m'oblige à effectuer une vérification globale de mon formulaire avant d'effectuer mes vérifications de dates??
Dans mon contrôlleur, lorsque je lance la vérification de mon formulaire via $form->isValid($_POST), ce n'est pas pour être obligé d'effectuer d'autres vérifications! La méthode isValid() porte bien son nom : elle est déjà sensée me retourner si mon formulaire est bon ou pas!
N'y aurait-il pas un autre moyen plus logique (et plus souple)?
ziedb => Dis moi si je me trompe, mais le problème reste le même : ta variable $date_op doit contenir l'association des valeurs des 3 champs.
Hors ligne
Personnelement, j'écrirais une classe Validate qui ferait ce que tu veux faire puis je l'ajouterais à mon élement de formulaire C'est ce que j'ai fait pour tester l'existence d'une adresse mail en base de données (pour éviter l'inscription de deux emails identiques).
Apsy
Dernière modification par apsy (10-04-2008 17:38:27)
Hors ligne
Merci, je vais essayer cette solution. Tu n'aurais pas un exemple sous le coude histoire de me faire gagner du temps stp?
Dernière modification par OrangeKarma (10-04-2008 17:51:18)
Hors ligne
NB: Perso pour des problèmes d'ergonomies, je ne conseille pas les date en 3 selects.
Les personnes tappent plus logiquement une date formatée... A la limite un petit jQuery Datepicker peut le faire
Hors ligne
Pages: 1