Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour à tous,
Voici le cas dans lequel je me trouve : l'utilisateur doit choisir deux dates, une date de fin, et une date de commencement.
Je voudrais - bien entendu - que s'il s'amuse à mettre la date de fin antérieur à la date de commencement, isValid() écrive un message d'erreur comme pour les autres types d'erreurs.
J'ai déjà écrit un validateur personnel (Validateurs_MyDateValidate que j'ai mis dans library/validateurs/).
J'ai déjà vérifié qu'il fonctionnait avec des valeurs "en dur" (une date donnée en paramètre).
Mais je ne sais pas comment lui passer en paramètre une valeur du champ renvoyé par le formulaire.
Mon code.
Dans le formulaire :
$dateactuelle = date("l d F Y"); // Date de début des inscriptions $dateinscripdeb = new ZendX_JQuery_Form_Element_DatePicker( 'debutinscription', array("label" => "Début des inscriptions :")); $dateinscripdeb->setDescription('Date à partir de laquelle on peut commencer à s\'inscrire') ->setValue($dateactuelle); // Date de fin des inscriptions $dateinscripfin = new ZendX_JQuery_Form_Element_DatePicker( 'fininscription', array("label" => "Fin des inscriptions :")); $dateinscripfin->setDescription('Date de Fin); ->addValidator(new Validateurs_MyDateValidate('l d F Y', $dateinscripdeb->getValue())) ->setValue($dateactuelle);
J'ai laissé le getValue() dans le code ci-dessus pour bien montrer le paramètre que j'aimerais récupérer, mais bien entendu, ça ne fonctionne pas, je me retrouve toujours avec la valeur par défaut !
Je cherche à vérifier que datefin est bien une date postérieure à datedebut.
J'ai essayé de passer par le registre (mettre la valeur renvoyée par le formulaire dans le registre après un populate() dans le contrôleur) valeur que je récupérais dans le formulaire, mais ça ne fonctionne pas.
Si vous avez une solution ou bien carrément une meilleure façon de procéder, je suis tout ouïe.
Dernière modification par gmifsud (17-06-2010 09:54:17)
Hors ligne
En général un getvalue s'effectue sur un objet formulaire
Hors ligne
Malheuresuement, ça ne fonctionne pas avec un sous-formulaire ou un formulaire ZendX... je ne suis ps sûr mais ce qui est sûr c'est que dans mon contrôleur, je récupère les données du formulaire ainsi :
// Si le formulaire a été envoyé if ($this->getRequest()->isPost()) { // On récupère les données envoyées par le formulaire $formData = $this->getRequest()->getPost(); // On "peuple" le formulaire avec les données renvoyées $form->populate($formData); // Si c'est le bouton Annuler qui a été cliqué, on retourne simplement à la page principale if ($form->Annuler->isChecked()) { $this->_helper->redirector('index'); } // Si c'est le bouton Confirmer if ($form->Confirmer->isChecked()) { if ($form->isValid($formData)) { $intitule = $form->getValue('intitule'); ... $datedebut = $formData["datedebut"]; (car $form->getValue('datedebut') ne renvoie rien) $datefin = $formData["datefin"]; ... } } }
Hors ligne
Trouvé !
Sur la page de documentation : http://framework.zend.com/manual/fr/zen … ments.html il s'agit de : "Validation Context"
Je n'ai pas encore testé mais ça semble être exactement ce que je cherche.
Hors ligne
Juste pour dire que cela fonctionne. Il faut utiliser les valeurs du "context".
Je mets un exemple concret pour ceux qui rencontreraient le même problème.
Dans mon validateur, qui vérifie qu'une date n'est pas supérieure ou inférieure à d'autres dates renvoyées par le formulaire, je procède ainsi :
public function isValid($value, $context = null) { // Les valeurs renvoyées par le formulaire sont dans $context if (is_array($context)) { // Si la date de début a été renvoyée par le formulaire if (isset($context['datedebut'])) { // on la récupère $datedebut = $context['datedebut']; } // Si la date de début d'inscription a été renvoyée par le formulaire, // on la récupère et la convertit. if (isset($context['debutinscription'])) { $debutinscription = $context['debutinscription']; } } // On vérifie que la date à tester n'est pas postérieure à la date de début de la manifestation if($datedeb){ if($dateValue > $datedeb){ // On initialise les variables pour le message d'erreur $this->_date = $context['datedebut']; $this->_error(self::FIN_INSCRIP_AFTER_DEBUT_DATE); return false; } } // On vérifie que la date à tester n'est pas antérieure à la date de fin d'inscription if($debutinscription){ if($dateValue < $dateinscripdeb){ // On initialise les variables pour le message d'erreur $this->_date = $context['debutinscription']; $this->_error(self::FIN_INSCRIP_BEFORE_DEBUT_INSCRIP_DATE); return false; } } return true; }
Hors ligne
Pages: 1