Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
Existe-t'il un validateur qui oblige la saisie sur au moins un des champs d'un formulaire ?
Je m'explique. J'ai un zend form avec plusieurs champs textes. Je n'ai attribué aucun validateur sur mes champs. En revanche je ne veux pas qu'un utilisateur puisse valider le formulaire sans au moins avoir remplit un des champs.
Existe-t'il un validateur à appliquer directement sur le formulaire qui pourrait vérifier ceci ?
Merci par avance.
Djo
Hors ligne
Salut,
Tu dois le faire toi-même. J'ai fait ça comme ça pour un multi-checkbox un peu spécial, tu peux peut-être repartir dessus:
class Validator_Ads_Publication extends Zend_Validate_Abstract { const ADS_NOT_PUBLISHED = 'adsNotPublished'; protected $_messageTemplates = array( self::ADS_NOT_PUBLISHED => 'This ad may not be published, pls choose one option (service, rental or selling)' ); public function isValid($value, $context = null) { if ($context['service'] === NULL AND $context['rental'] === NULL AND $context['sales'] === NULL) { $this->_error(self::ADS_NOT_PUBLISHED); return false; } return true; } }
Tu peux rajouter ce validateur au bouton "submit" par exemple.
++
Hors ligne
Super pratique ton validateur Merci.
Du coup si cela peut servir à quelqu'un voici ce que j'ai fait. A savoir que mon script est un générateur de zend form et que je ne connais que le nom du bouton à chaque fois que j'en génère un (d'ou le unset);
class Validator_CheckPublication extends Zend_Validate_Abstract {
public function isValid($value, $context = null) {
//On copie le tableau pour ne pas travailler directement dessus
$contextCloned = $context;
//On supprime la seule entrée obligatoire et connue (le bouton submit)
unset ( $contextCloned ['module_form_submit'] );
//On vérifie si les values du tableau sont vide
$i = 0;
foreach ( $contextCloned as $key => $val ) {
if ($val != "") {
$i = $i + 1;
}
}
//Si i=0 c'est que l'utilisateur n'a absolument rien renseigné
if ($i == 0) {
return false;
}
return true;
}
}
Hors ligne
Pages: 1