Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Salut à tous,
N'utilisant pas Zend_Form car je le trouve trop complexe et pas assez flexible, je me demandais tout bêtement, où faire la validation de mes formulaires (j'utilise bien Zend_Validate par contre ^^) ? Dans mes contrôleurs (si oui, je trouve que c'est pas terrible quand même si? :S) ?
Hors ligne
Tu peux utiliser Zend_Form pour la validation et Html pour concevoir le formulaire, ca marche aussi. Je le fais pour des formulaires complexes.
Hors ligne
Ca m'intéresse fortement.
Comment procèdes-tu pour faire ça et où est l'intérêt dans ce cas là?
Merci de ta réponse.
Hors ligne
Voir mon post ici :
http://www.z-f.fr/forum/viewtopic.php?id=3816
Hors ligne
Pinaise, c'est pile poil ce que j'attendais de Zend_Form. Vraiment fantastique, merci beaucoup !
Hors ligne
Serait-ce abuser que de te demander de nous montrer ta classe My_Form? ^^
Hors ligne
Bah y'a pas grand chose dans My_Form
<?php class My_Form extends Zend_Form { public function addElementFilters(array $filters) { foreach ($this->getElements() as $element) { $element->addFilters($filters); } return $this; } }
J'ai juste ajouter une méthode qu'il n'y a pas dans zend_form. Tu peux extends zend_form si tu n'as pas besoin de la méthode addElementFilters.
Hors ligne
Merci.
Autre question débile. Comment valider un champs, en fonction du résultat d'un autre champs ou encore en fonction du résultat du validator d'un autre champs?
Hors ligne
Personne?
Hors ligne
bah y a bien une methode isValid
$champ->isValid($value);
Donc tu dois vérifier si le champ à une valeur et si il est valide. si la condition est vérifier tu dois pouvoir valider l'autre champ. J'ai jamais tester mais ca doit étre faisable
Dernière modification par alien7 (17-09-2009 20:52:24)
Hors ligne
Ou bien il faut que tu créer t'es propre validate et les appliquer a t'es champs
class namespace_validate_nomValidate extends Zend_Validate_Abstract
Moi perso je l'ai ai mis dans library/plugin/MonNamespace/validate
je ne sais pas si c'est la bonne solution.....
Hors ligne
Tu peux aussi utiliser Zend_Filter_Input
Hors ligne
Non non je veux vraiment juste valider mes input, pas les filtrer (enfin si, j'applique les filtres striptags et stringtrim a mes imputs mais c'est tout.
En gros je dois faire un inscription pour deux types de comptes différents (société ou membre) et comme il y a des infos communes ça m'embête de faire deux formulaires différents donc je veux les fusionner.
Le truc c'est que par exemple je veux que l'adresse soit obligatoire pour l'entreprise mais pas pour le membre.
Pour l'instant j'ai donc fait un truc comme ça (exemple avec le numéro de mobile, même cas qu'avec l'adresse) :
// Mobile if ($accountType == 'member') { $mobile->addValidator($validators['NotEmpty']); } elseif ($accountType == 'company') { $mobile->addValidator($validators['NotEmpty'], true); } if ($accountType == 'member' && ! $mobile->isValid($mobile->getValue())) { $mobile->removeValidator('NotEmpty'); } if ($accountType == 'company' || $accountType == 'member' && $mobile->isValid($mobile->getValue())) { $mobile->addValidator($validators['Digits']) ->addValidator($validators['StringLength']->setMin(8)->setMaxi(12)); }
Je n'ai pas testé donc je n'ai aucune idée de si ça va marcher ou non. J'espère aussi que removeValidator() supprime les messages d'erreur associés à ce validateur...
bref si quelqu'un voit une meilleure solution...
Hors ligne
Aidez moi please, ça me prend la tête et c'est plutôt urgent...
Hors ligne
Bonsoir, petit souci de validateur, si quelqu'un voit le problème...
Si je fais :
// Login $login->addValidator($validators['NotEmpty'], true) ->addValidator($validators['Alnum']->setAllowWhiteSpace(true)) ->addValidator($validators['StringLength']->setMin(6)->setMax(15));
Il me renvoie les erreurs des deux derniers validateurs mais pas du NotEmpty.
Si je fais :
// Login $login->setRequired(true) ->addValidator($validators['NotEmpty'], true) ->addValidator($validators['Alnum']->setAllowWhiteSpace(true)) ->addValidator($validators['StringLength']->setMin(6)->setMax(15));
Il me renvoie l'erreur des trois derniers validateurs, mais pas du required.
Si je fais :
// Login $login->setRequired(true) ->addValidator($validators['Alnum']->setAllowWhiteSpace(true)) ->addValidator($validators['StringLength']->setMin(6)->setMax(15));
Il me renvoie bien l'erreur du required (mais je ne peux pas personnaliser le message d'erreur ).
Merci d'avance si quelqu'un arrive à m'expliquer le pourquoi du comment.
Bonne soirée.
Hors ligne
alien7 a écrit:
Tu peux utiliser Zend_Form pour la validation et Html pour concevoir le formulaire, ca marche aussi. Je le fais pour des formulaires complexes.
Le problème c'est que ce n'est pas pratique car , sans l'essayer, je pense que $form->popuate ne marchera pas ce qui alourdira les taches et le code
Hors ligne
Salut alien7,
Encore un problème dont tu connaitras peut-être la solution : sur certains champs mes validateurs sont inefficaces. Ou plutôt non, c'est carrément mon form qui ne récupère pas la valeur dans $_POST. Et pourtant sur les autre champs ça marche très très bien. Je comprends absolument rien.
Exemple :
- J'ai deux bouton radio pour demander si l'utilisateur veut s'abonner à la newsletter, tout passe correctement.
- J'ai fait un copier coller en changeant juste le nom du champs et la haystack pour faire un champs avec trois boutons radio pour demander le titre de civilité et rien ne passe, il ne récupère pas la valeur dans le post...
Voila mon form HTML pour les deux champs (le premier marche très bien et pas l'autre) :
<div class="ligne"> <span class="heading_case">Titre de civilité :</span> <span class="case"> <input type="radio" value="miss" name="civilityTitle" id="tooltipsLocate"/> Melle <input type="radio" value="mrs" name="civilityTitle"/> Mme <input type="radio" value="mr" name="civilityTitle"/> Meur <span class="obg_fields">*</span> </span> <?php $this->formInputError('civilityTitle'); ?> </div> <div class="ligne" onmouseout="cache();" onmouseover="montre('<p><b>Description : </b>si vous souhaitez etre tenus informés régulierement, par mail, des nouveautés et des promotions de Wiki-RH, abonnez-vous à nos courriels d'information.</p>');"> <span class="heading_case">S'abonner à la newsletter ?</span> <span class="case"> <input id="tooltipsLocate" type="radio" name="newslettersSubscriber" value="yes" <?php if (isset($this->formValues) && isset($this->formValues['newslettersSubscriber']) && $this->formValues['newslettersSubscriber'] == 1): ?> checked="checked" <?php endif; ?>/> Oui <input id="tooltipsLocate" type="radio" name="newslettersSubscriber" value="no" <?php if (isset($this->formValues) && isset($this->formValues['newslettersSubscriber']) && $this->formValues['newslettersSubscriber'] == 0): ?> checked="checked" <?php endif; ?>/> Non <?php echo $this->formInputError('newslettersSubscriber'); ?> </span> </div>
Dans mon Zend_Form :
$newslettersSubscriber = new Zend_Form_Element_Radio('newslettersSubscriber', array('setRegisterInArrayValidator' => false)); $civilityTitle = new Zend_Form_Element_Radio('civilityTitle', array('setRegisterInArrayValidator' => false)); // Newsletters subscription $newslettersSubscriber->setRequired(true) ->addValidator($validators['NotEmpty'], true) ->addValidator($validators['InArray']->setHaystack(array('no', 'yes'))); // Civility title $civilityTitle->setRequired(true) ->addValidator($validators['NotEmpty'], true) ->addValidator($validators['InArray']->setHaystack(array('miss', 'mrs', 'mr')));
PS 1 : pour le formInput Error, je ne fais pas de echo puisque le echo est directement dans le view helper
PS 2 : ça ne semble pas venir de mon $validators[] puisque les autres champs marchent à merveille (c'est juste un tableau renvoyé par un action helper qui m'initialise mes validateurs et qui met les messages d'erreur personnalisés aux validateurs demandés).
Ca fait plusieurs jours que je cherche et je ne vois vraiment pas le problème... Si quelqu'un trouve, je l'aime.
Hors ligne