Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 16-06-2010 10:51:54

gmifsud
Membre
Date d'inscription: 29-04-2010
Messages: 75

[Resolu] Validate : utiliser une valeur renvoyée dans la validation ?

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 :

Code:

$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

 

#2 16-06-2010 12:22:16

padapara
Membre
Date d'inscription: 25-03-2010
Messages: 10

Re: [Resolu] Validate : utiliser une valeur renvoyée dans la validation ?

En général un getvalue s'effectue sur un objet formulaire

Hors ligne

 

#3 16-06-2010 13:10:44

gmifsud
Membre
Date d'inscription: 29-04-2010
Messages: 75

Re: [Resolu] Validate : utiliser une valeur renvoyée dans la validation ?

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 :

Code:

// 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

 

#4 17-06-2010 09:53:22

gmifsud
Membre
Date d'inscription: 29-04-2010
Messages: 75

Re: [Resolu] Validate : utiliser une valeur renvoyée dans la validation ?

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

 

#5 01-07-2010 15:14:35

gmifsud
Membre
Date d'inscription: 29-04-2010
Messages: 75

Re: [Resolu] Validate : utiliser une valeur renvoyée dans la validation ?

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 :

Code:

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

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages