Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
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
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
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
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) :
$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 ...
Du coup, en renvoyant false dans le validateur, l'élément sera pas valide.
Hors ligne
Pages: 1