Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 22-11-2011 22:14:27

syntaxlb
Membre
Date d'inscription: 01-07-2010
Messages: 14

[Zend_Form] Ajout dynamique de validateur

Bonjour, je possède un formulaire, avec 1 champ Select (ComboBox avec Dojo), et 1 champ Input.

Le champ Input est obligatoire en fonction de ce que choisis l'utilisateur dans le Select.
J'aimerai donc savoir si il est possible (surement en js, ou avec dojo) d'ajouter/supprimer un validateur (ici NotEmpty) sur un champ ?

Cordialement,
Julien

Hors ligne

 

#2 22-11-2011 23:21:04

syntaxlb
Membre
Date d'inscription: 01-07-2010
Messages: 14

Re: [Zend_Form] Ajout dynamique de validateur

Bon je ne pense pas que ce soit véritablement possible en fait...

J'ai opté alors pour un validateur perso, qui vérifie sur le champs est vide SEULEMENT si le champ passé en argument possède la valeur passé en argument.

Voici mon code :

class Application_Validate_NotEmpty extends Zend_Validate_Abstract
{
    const ERR_VIDE = 'vide';

    // Message d'erreur
    protected $_messageTemplates = array(
        self::ERR_VIDE => "Valeur obligatoire"
    );
   
    protected $_idChamp;
    protected $_condition;
   
    public function __construct($idChamp = null, $condition = null)
    {
        $this->_idChamp = $idChamp;
        $this->_condition = $condition;
    }

    public function isValid($value, $context = null)
    {
        echo "test";
        exit;
        $this->_setValue($value);
       
        // Si le champ $idChamp possède comme valeur la $condition
        // Alors on test si le champ est vide.
        if ($context[$this->_idChamp] == $this->_condition) {
           if (empty($value) || $value == "") {
               $this->_error(self::ERR_VIDE);
               $codeErreur = false;
           } else {
               $codeErreur = true;
           }
           
        // Sinon, le champ passe la validation.
        } else {
            $codeErreur = true;
        }

        // On retourne soit true ou false
        return $codeErreur;
    }
}

Le problème est que la page ne passe pas dans la méthode isValid, si le champ est vide !

Dernière modification par syntaxlb (22-11-2011 23:21:33)

Hors ligne

 

#3 22-11-2011 23:46:52

shadypierre
Membre
Date d'inscription: 24-03-2010
Messages: 617

Re: [Zend_Form] Ajout dynamique de validateur

Tu peux simplement faire une fonction preValidation() qui est appelé avant le isValid(). Cette fonction récupére les valeur saisi dans le formulaire puis rajoute les validateurs en fonction.

Hors ligne

 

#4 23-11-2011 21:00:55

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

Re: [Zend_Form] Ajout dynamique de validateur

Ya peut-être un moyen : les callbacks.

J'ai pas testé la syntaxe mais l'idée c'est d'ajouter un validateur Callback à ton élément avec une fonction (ou une closure si tu utilises PHP 5.3) :

Code:

$monSelect = $this->getElement('monSelect');
$monElementQuiDependDuSelect = $this->createElement('text', 'monElement');
$monElementQuiDependDuSelect()->addValidator('callback', false, array(
    'callback' => function() use $monSelect {
        return ($monSelect->getValue() == 'valeurA' ? true : false);
    }
);

Tu comprends l'idée ? Pas sûr que ça marche mais ça me paraît bien yikes...

Du coup, en renvoyant false dans le validateur, l'élément sera pas valide.

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