Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Je souhaite écrire un validateur qui fait en sorte que si une checkbox est cochée, le champs d'en dessous est requis.
Le problème est que si je soumets le formulaire avec la checkbox cochée mais la textarea vide, la fonction isValid n'est pas appelée (d'ailleurs est-ce normal ça ? C'est pas très pratique...).
Auriez vous une idée ?
@+
Hors ligne
Non c'est pas normal... La méthode isValid, c'est toi qui doit l'appeler dans ton action. Par contre ce qui est possible c'est que la validation soit interrompue à la première erreur trouvée, selon la manière dont tu as configuré tes validateurs.
Pour ton problème, tu peux surcharger la méthode isValid() dans ta classe formulaire et faire la validation que tu désires après-coup.
Ou alors tu peux également créer une validateur spécial qui marche sous condition, mais c'est plus complexe à mettre en oeuvre.
Hors ligne
Merci de ta réponse, je n'avais pas précisé s'il devait s'arrêter à la 1ère erreur ou pas, mais ça ne change rien .
Voici mon code :
Dans mon formulaire j'ai ceci :
$payante = new Zend_Form_Element_Checkbox('payante'); $payante->setLabel('Payante :'); $payante->setAttrib('id', 'payante'); $description_tarif = new Zend_Form_Element_Textarea('description_tarif'); $description_tarif->setLabel("Description du tarif (uniquement pour les inscriptions payantes) : "); $description_tarif->addValidator(new Form_Validateurs_SortiesAjoutCheckbox(), false);
Et voici mon validateur :
<?php class Form_Validateurs_SortiesAjoutCheckbox extends Zend_Validate_Abstract { const BOITE_VIDE = 'boiteVide'; protected $_messageTemplates = array ( self::BOITE_VIDE => "Ce champ est vide : vous devez le compléter." ); public function isValid($value) { $this->_setValue($value); $payante = $_POST['payante']; if($payante == 0) { return true; } else if($payante == 1) { echo $payante; $validator = new Zend_Validate_NotEmpty(); if(!$validator->isValid($value)) { $this->_error(self::BOITE_VIDE); return false; } } return true; } } ?>
Je ne vois pas ou ça cloche
Hors ligne
Peut-être s'agit-il du même problème que celui que j'avais hier :
http://www.z-f.fr/forum/viewtopic.php?id=5374
Tu sembles essayer de récupérer une valeur soumise pour en tester une autre ; il te faut donc très certainement utiliser "Validation Context".
Voir la page de documentation : http://framework.zend.com/manual/fr/zen … ments.html
Hors ligne
Bonsoir,
J'ai recherché ce genre de solution sur un validateur de confirmation de mots de passe, et tu n'es pas loin de la solution. Tu peux surcharger la fonction isValid avec un deuxième paramètre : le context, qui contient toutes les info sur ton formulaire.
public function isValid($value, $context = null) { // récupérer la checkbox $payante = $context['payanye']; // suite du traitement comme tu as commencé à le faire }
ps: j'avais pas vu ton lien gmifsud mais c'est ça, d'ailleurs l'exemple est exactement la même que ce que j'ai implémenté, si j'avais lu ça plus tôt cela m'aurait fait économiser quelques heures ^^ merci pour le lien en tout cas.
Dernière modification par Lukas P. (19-06-2010 23:58:40)
Hors ligne