Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
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.
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:
$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
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
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:
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
Pages: 1