Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour a tous..
J'ai une question pour vous aujourd'hui :
J'ai un formulaire, disposant de checklists (liste de checkbox), et j'utilise un Zend_filter_input pour vérifier mes données.
Je récupere mes checkbox normalement dans $_POST['process[]'], je les ai donc toutes là dedans.
Cependant, comment vérifier si au moins une checkbox a été cochée ?
j'ai testé le notEmpty dessus, mais il ne renvoi rien, puisque que le process[] n'est pas envoyé si rien n'est coché...
Il y a une technique? ou alors je suis obligé de me faire un filtre pr initialiser le tableau si il n'existe pas, puis ensuite vérifier avec un validateurs maison pr faire un count($process[]) ?
Merci des réponses
Dernière modification par stf (05-06-2008 10:16:37)
Hors ligne
En fait, si j'ai bien compris, tu dois savoir si le checkbox a été coché. Dans le cas ou il n'est pas coché tu ne récupères rien en POST. Donc ce que tu dois tester c'est si tu récupères qq chose ou non, puisque coché = VALEUR et non coché = que dalle !
SI c'est bien ce que tu veux tu peux faire ça dans ton controlleur : $this->request->has('NOM_CHECKBOX') qui te retournera 1 si ton checkbox est coché et 0 dans le cas contraire.
Ceci dit si tu utilises Zend_Form et l'élément Zend_Element_Checkbox tu peux utiliser setCheckedValue() et setUncheckedValue. Je crois que ces propriétés existes dans le helper de vue formCheckbox.
Bon je suis super fatigué aujourd'hui, donc j'espère avoir bien compris ce que tu désires.
Hors ligne
Ouep tu as compris , sauf que (y'a toujours un sauf ), je n'utilise pas le coté MVC du ZF, donc ps de helper, pas de $this->request, et je n'utilise pas le Zend_form, étant donné que la sorte de champ que j'utilise, est plutot "spéciale", en gros je refait une sorte de liste déroulante, à partir de checkbox invisibles sur un div blanc, ceci pour présenter une sorte d'arborescence
En gros, je voudrais pouvoir faire en quelques sorte un required sur mon process[], à partir d'un validateur...(hors il n'y a pas de validateur "required")
Dernière modification par stf (04-06-2008 14:23:18)
Hors ligne
Tu peux nous donner un morceau de code, j'ai du mal à voir ce que tu as et ce que tu veux faire et surtout ce que contient ton process[], comment tu récupère en POST tes éléments. En fait, ce que je ne comprends par dessus tout c'est que si tu récupères tes éléments coché par POST et les éléments non cochés ne sont pas là, tu peux toujours faire un isset() dessus (ce qui reviens au ->has() de mon post précédent) non ?
Au cas ou, voici le code du $request->has()
/** * Check to see if a property is set * * @param string $key * @return boolean */ public function __isset($key) { switch (true) { case isset($this->_params[$key]): return true; case isset($_GET[$key]): return true; case isset($_POST[$key]): return true; case isset($_COOKIE[$key]): return true; case isset($_SERVER[$key]): return true; case isset($_ENV[$key]): return true; default: return false; } } /** * Alias to __isset() * * @param string $key * @return boolean */ public function has($key) { return $this->__isset($key); }
du fichier Zend/controller/request/http.php
Bon si ça se trouve je suis encore à l'ouest, je t'ai dit que j'étais fatigué aujourd'hui, d'ailleurs j'ai une chaussette noire, l'autre blanche et on m'a laissé aller en réunion sans rien me dire... Tous des enfoirés !!!
Hors ligne
^^
En gros on va faire comme si j'avais un formulaire tout simple, avec plusieurs checkbox :
<input type='checkbox' name="process['1']"> <input type='checkbox' name="process['2']"> <input type='checkbox' name="process['3']">
Pour vérifier les données, je fais ca :
if(isset($_POST['submit'])){ $fform=new Zend_filter_input($filters,$validators); $fform->setData($_POST); if($fform->isValid()){ //form bien rempli }else{ //form mal rempli } }
J'aimerai que mes validateurs vérifient tout seuls comme des grands si au moins une checkbox a été cochée.
Donc en gros si le tableau process[] qui est dans POST existe....
hors je ne trouve pas de validateurs qui pourraient faire ca ..d'où ma question pour savoir si il y avait moyen de simuler un "required" comme validateur
(ou alors si je devais faire mon validateur perso)
Tout "simplement"
Hors ligne
je pense avoir trouvé : on peut mettre 'presence' => 'required' dans nos validateurs....
Je testerais ca plus en détail demain
PS : Explication des probleme du Zend_Filter_input (en anglais)
Dernière modification par stf (04-06-2008 17:10:01)
Hors ligne
Hop, bon bé c'était bien ce required:true qu'il me fallait pour valider mes checkbox
Reste à réussir à personnaliser les messages pour ce required, il me font de la résistance
[résolu ]
Dernière modification par stf (05-06-2008 11:15:01)
Hors ligne
Je reviens sur ceci, quelqu'un voit t'il un probleme dans ma déclaration des messages pour mon required ?
J'ai encore du mal avec ca ^^
'dateAudit' =>array( 'presence' => 'required', 'messages'=>array( array( Zend_Filter_Input::MISSING_MESSAGE=>$translate->_("Vous devez sélectionner une date valide"), Zend_Filter_Input::NOT_EMPTY_MESSAGE=> $translate->_(" Sélectionnez la date de l'audit") ) ) )
(désolé pour la mise en page :s )
Il s'entete à garder les messages d'origine
Dernière modification par stf (09-06-2008 10:50:34)
Hors ligne
je crois (dis-je timidement) que tu dois le faire en utilisant setAttrib :
->setAttribs(array("presence"=>"required")
Hors ligne
Le required passe bien , là n'est point le probleme , c'est juste sur le message, il me garde le :
Field 'process' is required by rule 'process', but the field is missing
J'en déduis que ma déclaration des messages doit etre incorrecte quelque part, mais là...je ne vois pas où
Dernière modification par stf (09-06-2008 11:24:15)
Hors ligne