Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 03-01-2011 09:33:42

DSI
Nouveau membre
Date d'inscription: 03-01-2011
Messages: 2

[Résolu][Zend_form][1.10.7] Champ obligatoire si autre champ renseigné

Bonjour à tous,

je souhaite faire un validateur qui verifi qu'un champ est renseigné si un autre champ à une valeur bien précise.
Exemple : dans mon formulaire j'ai un champ caché en css, il devient visible quand un select renvoi la valeur 1 et invisible si la valeur est 0. En plus de cela je veux rendre obligatoire ce champ quand il est visible.
pour cela j'ai créé un validateur.

Code:

class Validator_Test extends Zend_Validate_Abstract
    {
    protected $_id = "";
    public function __construct($options = null)
        {
        $this->_id=$options;
        
        }
    public function isValid($value, $context = null)
        {
        
        $value = (int) $value;
        $this->_setValue($value);
        if (is_array($context)) 
            {
            if (isset($context[$this->_id]) && ($context[$this->_id]==1))
                {
                if(isset($context[$this->_id]))
                    {
                    echo "OK";
                    return true;
                    }
                }
            } 
        
        echo "NOK";
        return false;
        }
    }

Appel du validateur:

Code:

$date_debut = new Zend_Form_Element_Text('date_debut');
        $date_debut->setLabel('De')
                    // ajout de filtre pour eviter le html et les espaces
                    ->addFilter('StripTags')
                    ->setAttrib('maxlength', 10)
                    ->setAttrib('size', 11)
                    ->addValidator(new Zend_Validate_Date('MM/YYYY'))
                    ->addValidator(new Validator_Test("moto_idem"))
                    ->setDecorators($decorateurs_element)
                    ->addDecorator(array('tr' => 'HtmlTag'), array('tag' => 'tr','class'=>'antecedents_moto'));

Le probleme est que lorsque mon champ est vide le formulaire est quand meme valider. Je ne vois pas d'ou vient l'erreur. Pouvez-vous m'aider?
Merci

Dernière modification par DSI (05-01-2011 08:43:11)

Hors ligne

 

#2 03-01-2011 15:19:24

bakura
Administrateur
Date d'inscription: 30-01-2010
Messages: 353

Re: [Résolu][Zend_form][1.10.7] Champ obligatoire si autre champ renseigné

Salut,

ça ressemble un peu à ça : http://www.z-f.fr/forum/viewtopic.php?id=6093

Ma réponse sera la même : tu surcharges la fonction isValid du formulaire pour rendre ton élément obligatoire (avec un setRequired).

Que représente le "moto_idem" de ton validateur ? La valeur ?

Hors ligne

 

#3 05-01-2011 08:41:39

DSI
Nouveau membre
Date d'inscription: 03-01-2011
Messages: 2

Re: [Résolu][Zend_form][1.10.7] Champ obligatoire si autre champ renseigné

J'ai essayer la solution precedente mais rien lors de la validation si le champ est rempli il passe par le validateur sinon il ne passe par par le validateur.

j'ai trouver une autre solution qui me convient:

dans ma class formulaire qui herite de zend_form j'ai reecrit la  fonction isValid() voici mon code pour ce que ca interesse:

Code:

public function isValid($value, $context = null)
    {
    
        //verifi la valeur de mon select
               //si la valeur est a 1 je defini les champs que je veut rendre obligatoire
              //sinon je rend les champ non obligatoire
              // et je repasse dans la fonction isValid de la class zend_form
        if($value['moto_idem']==1)
            {
            $this->getElement('date_debut')->setRequired(true);
            $this->getElement('date_fin')->setRequired(true);
            $this->getElement('marque2')->setRequired(true);
            $this->getElement('modele2')->setRequired(true);
            }
                else
            {
                        $this->getElement('date_debut')->setRequired(false);
                $this->getElement('date_fin')->setRequired(false);
                $this->getElement('marque2')->setRequired(false);
                $this->getElement('modele2')->setRequired(false);
                }

        return parent::isValid($value);

    }

si quelqu'un d'autre a une meilleur solution je suis toujours preneur
Merci

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