Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 07-06-2010 10:54:21

timautin
Membre
Date d'inscription: 21-04-2010
Messages: 17

Zend Form validateur & element vide

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 sad (d'ailleurs est-ce normal ça ? C'est pas très pratique...).
Auriez vous une idée ?
@+

Hors ligne

 

#2 07-06-2010 11:29:18

keilnoth
Membre
Date d'inscription: 30-08-2008
Messages: 128
Site web

Re: Zend Form validateur & element vide

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.


Quelques tutoriaux Zend Framework !

Hors ligne

 

#3 07-06-2010 16:20:50

timautin
Membre
Date d'inscription: 21-04-2010
Messages: 17

Re: Zend Form validateur & element vide

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 sad.
Voici mon code :
Dans mon formulaire j'ai ceci :

Code:

$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 :

Code:

<?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 sad

Hors ligne

 

#4 17-06-2010 09:59:42

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

Re: Zend Form validateur & element vide

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

 

#5 19-06-2010 23:55:07

Lukas P.
Membre
Date d'inscription: 28-12-2008
Messages: 11

Re: Zend Form validateur & element vide

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.

Code:

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

 

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