Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
Je suis en train d'apprendre le Zend framework, dans le but de remplacer des bibliothèques dépréciées, augmenter la sécurité et diminuer la complexité du code d'un de mes projets.
Je n'utilise donc pas ZF en MVC mais comme une collection de bibliothèques externes.
Je me suis penché sur Zend Form qui va me faire gagner un temps dingue en développement mais j'ai quelques interrogations qui me restent après avoir terminé mon premier formulaire pour m'entraîner
Voici mon code :
$form = new Zend_Form; $form->setAction('form.php') ->setMethod('post'); $el['username'] = $form->createElement('text', 'username', array( 'required' => true, 'label' => 'Pseudo')) ->addValidator('alnum'); $el['message'] = $form->createElement('textarea', 'message', array( 'required' => true, 'label' => 'Message')); $el['Poster'] = $form->createElement('submit', 'Poster'); $form->addElements($el); if($form->isValid($_POST)) { echo 'Hey valide !'; } else { if(!$form->getValue('Poster')) { foreach($el as $id=>$val) $el[$id]->removeDecorator('Errors'); } $form->setDefaults($form->getValues()) ->setView(new Zend_View()); echo $form; }
Pour le moment, j'utilise un hack :
if(!$form->getValue('Poster')) { foreach($el as $id=>$val) $el[$id]->removeDecorator('Errors'); }
Il me permet, au cas où le formulaire n'a pas été posté, de ne pas afficher les messages d'erreur... Je trouve ça très crade et je me dis qu'à mon avis il y a un autre moyen permettant de n'afficher les messages d'erreur QUE si le formulaire a été posté...
Et l'autre question que je me pose est : y a-t-il moyen de traduire automatiquement les messages d'erreur en français sans devoir définir des messages d'erreur perso (je dois avoir une bonne cinquantaine de formulaires sur mon appli, j'ai pas franchement envie de devoir tout faire à la main )
Merci de m'éclairer un peu là-dessus
Dernière modification par bistory (09-08-2009 23:17:08)
Hors ligne
Salut,
Pour ta première question, je ne comprends pas dans quel cas ton formulaire affichera les erreurs s'il n'a pas été "posté". De ce que j'ai compris, c'est seulement à la validation (submit) de ce dernier que les validateurs vont entrer en action et faire le boulot pour afficher ou non les erreurs.
Pour la deuxième, à ma connaissance non, pas moyen de tout traduire d'un coup de baguette :p ! Je personnalise mes messages d'erreurs dans chaque formulaire. Il a surement un moyen de faire des "aides d'actions" pour améliorer tout ça, mais je ne maitrise pas encore donc ça sera pour après .
Hors ligne
Bonjour,
Je pense que pour automatiser la traduction des formulaires(message d'erreurs, labels,descriptions....), il faut utiliser Zend_translate couplé avec Zend_locale.
$locale = new Zend_Locale('fr');//tu met la langue que tu veux $translate = new Zend_Translate('array', APPLICATION_PATH. '/languages',$locale,array('scan' => Zend_Translate::LOCALE_DIRECTORY));
Ensuite dans le répertoire languages tu met des dossiers (fr,en.....) et dans ces répertoires tu met t'es fichier de traductions.
Pour cette exemple j'ai utiliser un adaptateur 'array' donc dans mes fichiers il y aura quelque chose comme
return array( 'notAlnum' => "'%value%' ne contient pas que des lettres et/ou des chiffres.", 'notAlpha' => "'%value%' ne contient pas que des lettres.");
Et normalement grâce au clé du tableau (notAlnum,notAlpha.....), il récupère la bonne traduction dans la langue défini.
En espérant avoir aidé ou donné des idées...
Hors ligne
Salut,
Il faut dans un premier temps vérifier que des données ont été postées avant de vouloir les valider. Dans la structure MVC du ZF, on le fait de la sorte :
if(!$this->getRequest()->isPost()) { // affiche le formulaire de base } elseif(!$form->isValid($_POST)) { // affiche le formulaire avec les erreures } else { $values = $form->getValues(); // traitement des données }
++
Hors ligne
Merci à tous pour vos réponses, malheureusement, je ne peux pas me permettre d'utiliser la structure MVC, ça m'obligerai à refactorer 5 ans de code, je n'ai ni le temps ni l'envie de le faire, même si il faudra qu'un jour ou l'autre j'y passe, d'ici là, j'aurai pu apprendre mieux le zend framework
Je vais donc devoir continuer à bricoler pour la validation des formulaires et faire les traductions à la main dans une classe à part ^^
Bonne soirée/journée (dépendant de l'heure à laquelle vous verrez ce message ) !
Hors ligne
Pages: 1