Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Salut à tous, comme beaucoup d'entre vous je me suis mis à Zend_Form qui est plus que pas mal à ce que j'ai vu.
Bon enfin bref j'ai un soucis, enfin plusieurs points pas clair que j'ai rencontré en voulant utiliser une zend_config pour mon form.
J'ai le fichier suivant (regardez bien à l'intérieur je pose des questions ):
;;;; Register ;;;; ; general form metainformation user.register.action = "/user/register" user.register.method = "post" user.register.id = "user_register" user.register.prefixPath.validate.Rx_Validate = "Rx/Validate/" ;; Ici déjà j'arrive pas à envoyer des messages d'erreurs, j'ai testé plusieurs bidouilles sans succès (translation(s), translator, otpions.translator... en mettant directement pour chaque item du form... Ca marche pas non plus user.register.translator.stringEmpty = "Ce champ est requis" user.register.translator.stringLengthTooShort = "Les données saisies sont trop courtes" user.register.translator.stringLengthTooLong = "Les données saisies sont trop longues" user.register.translator.notAlnum = "Uniquement des chiffres et des lettres" user.register.translator.emailAddressInvalid = "Adresse e-mail invalide, veuillez la vérifier" ; name element user.register.elements.name.type = "text" user.register.elements.name.options.label = "Nickname" user.register.elements.name.options.class = "text" user.register.elements.name.options.validators.strlen.validator = "StringLength" user.register.elements.name.options.validators.strlen.options.min = "6" user.register.elements.name.options.validators.strlen.options.max = "100" ;;La j'ai testé pleins de trucs... user.register.elements.name.options.validators.strlen.translation = "Les données saisies sont trop courtes" user.register.elements.name.options.validators.strlen.translator = "Les données saisies sont trop courtes" user.register.elements.name.options.validators.strlen.messages.min = "Les données saisies sont trop courtes" user.register.elements.name.options.validators.strlen.options.translation.min = "Les données saisies sont trop courtes" user.register.elements.name.options.required = true user.register.elements.name.options.filters.lower.filter = "StringToLower" ; email element user.register.elements.email.type = "text" user.register.elements.email.options.label = "E-mail" user.register.elements.email.options.class = "text" user.register.elements.email.options.validators.email.validator = "EmailAddress" user.register.elements.email.options.required = true user.register.elements.email.options.filters.lower.filter = "StringToLower" ; password element user.register.elements.password.type = "password" user.register.elements.password.options.label = "Password" user.register.elements.password.options.class = "text" ;;Deuxième soucis, j'ai pas réussi à utiliser un de mes validateurs, avez vous réussi?? ;user.register.elements.password.options.validators.confirmation = "PasswordConfirmation" user.register.elements.password.options.validators.strlen.validator = "StringLength" user.register.elements.password.options.validators.strlen.options.min = "6" user.register.elements.password.options.required = true ; password element user.register.elements.password_confirm.type = "password" user.register.elements.password_confirm.options.label = "Confirmation Password" user.register.elements.password_confirm.options.class = "text" ; submit element user.register.elements.login.type = "image" user.register.elements.login.options.value = "img/ico/fff/accept.png"
Voila donc je rèpte vite fait mes problèmes:
- Messages d'erreurs
- Propres validateurs
Merci à vous
Hors ligne
Bon alors pour les validateurs perso j'ai fini par trouver
; password element user.register.elements.password.type = "password" user.register.elements.password.options.label = "Password" user.register.elements.password.options.class = "text" user.register.elements.password.options.prefixPath.validate.prefix = "Rx_Validate" user.register.elements.password.options.prefixPath.validate.path = "Rx/Validate/" user.register.elements.password.options.validators.confirmation = "PasswordConfirmation" user.register.elements.password.options.validators.strlen.validator = "StringLength" user.register.elements.password.options.validators.strlen.options.min = "6" user.register.elements.password.options.required = true
Bizarrement, l'ajout par .options.prefixPath. n'a pas marcher sur le form lui même mais que sur l'élement
J'ai lu ça qui m'a aidé un peu: http://www.nabble.com/Zend_Form_Element … 16154.html
Me reste plus qu'à traduire
Hors ligne
Tu dois reprendre les fichiers du trunk SVN car Matthew de chez Zend a corrigé quelques bugs concernant Zend_Form, l'as-tu déjà fait ? J'ai posté un topic à ce sujet
Hors ligne
J'ai pas envie de me faire chier à passer un translator vu que j'en ai pas... tout mon site et en français et je ne penses pas le traduire un jour (quoique?)
[Flegmemode] Bon au pire vous savez comment filer un translator par Ini?
Hors ligne
Salut vous deux
Alors... ce n'est pas moi qui va vous apporter grand aide, mais étant en pleine phase d'apprentissage, je suis curieux de tout ce qui touche à Zend et en ce moment c'est Zend_Form, qui m'intéresse
Je suis aussi curieux de savoir comme passer un translate à un ini ! En fait, j'aimerai incrémenter les label, en fonction de mon translate ! Vous voyez le truc ?
Pour reprendre l'exemple, de Mr.MoOx
Au lieu de :
user.register.elements.password.options.label = "Password"
je voudrai un truc du genre:
user.register.elements.password.options.label = $this->translate->password
Biensûr, je sais que passer du code, dans un CVS, n'est pas réalisable. Je souhaitai simplement vous donner un exemple concret de ce que je veux faire
Deuxième question:
En fait, je veux comme vous utiliser un ini, pour créer mes Form. Cependant, je n'arrive absolument pas à mettre la main sur une doc complète à ce sujet.
En fait, j'ai trouvé (je crois sur un des posts du forum) qu'il faillait faire ça:
$configuration['allowModifications'] = 'true'; $config = new Zend_Config_Ini('../views/scripts/index/_form.ini', 'development', $configuration); $form = new Zend_Form($config->user->login); $this->view->form = $this->render($form);
J'ai placé par bonne conscience ce bout de code dans l'action ajouterAction de mon IndexController.
Mais il m'affiche ce message d'erreur:
Fatal error: Uncaught exception 'Zend_Config_Exception' with message 'Section 'development' cannot be found in ../views/scripts/index/_form.ini' in E:\wamp\www\projects\pleegs\staging\library\Zend\Config\Ini.php:156 Stack trace: #0 E:\wamp\www\projects\pleegs\staging\application\controllers\IndexController.php(46): Zend_Config_Ini->__construct('../views/script...', 'development', Array) #1 E:\wamp\www\projects\pleegs\staging\library\Zend\Controller\Action.php(502): IndexController->ajouterAction() #2 E:\wamp\www\projects\pleegs\staging\library\Zend\Controller\Dispatcher\Standard.php(293): Zend_Controller_Action->dispatch('ajouterAction') #3 E:\wamp\www\projects\pleegs\staging\library\Zend\Controller\Front.php(914): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #4 E:\wamp\www\projects\pleegs\staging\index.php(61): Zend_Controller_Front->dispatch() #5 {main} thrown in E:\wamp\www\projects\pleegs\staging\library\Zend\Config\Ini.php on line 156
Je suspect que cela vienne du chemin au _form.ini (que j'ai placé dans le dossier /application/views/scripts/index/ de mon app "Hello world" )
Voila, voilou ;D
Merci d'avance !
Dernière modification par Badoux (31-03-2008 15:07:49)
Hors ligne
Hé, hé, mon incompétence (en explication) me fera courir à ma perte
En fait, mon ini est constitué de ceci:
[development] user.login.action = "/user/login" user.login.method = "post" ; username element user.login.elements.username.type = "text" user.login.elements.username.options.validators.alnum.validator = "alnum" user.login.elements.username.options.validators.regex.validator = "regex" user.login.elements.username.options.validators.regex.options.pattern = "/^[a-z]/i" user.login.elements.username.options.validators.strlen.validator = "StringLength" user.login.elements.username.options.validators.strlen.options.min = "6" user.login.elements.username.options.validators.strlen.options.max = "20" user.login.elements.username.options.required = true user.login.elements.username.options.filters.lower.filter = "StringToLower" ; password element user.login.elements.password.type = "password" user.login.elements.password.options.validators.strlen.validator = "StringLength" user.login.elements.password.options.validators.strlen.options.min = "6" user.login.elements.password.options.required = true ; submit element user.login.elements.submit.type = "submit"
l'exemple ci-dessus, était uniquement à titre indicatif.
Une idée ? Maintenant, que vous connaissez l'ensemble du fichier ?
Le truc, c'est que je suis entrain de test sur un "Hello world" et j'ai reprise exacte l'exemple que j'ai trouvé dans la doc de Zend, mais rie à faire ! Je comprend pas d'où vient ce message !
Hors ligne
Bonjour,
Je pense qu'il faut mettre dans ton .ini pour la traduction
user.register.translator.isEmpty = "Ce champ est requis"
car la chaine à traduire quand on utilise un fichier de traduction est isEmpty.
Si quelqu'un pouvait m'indiquer où je pourrais trouver la liste complète des ID des messages ce serait génial.
Merci
Dernière modification par Damien (04-06-2008 12:10:43)
Hors ligne
Coucou
Désolé de upper ce post qui date de quelques mois déjà, mais je suis également confronté à ce problème
Comment utiliser Zend_Translate pour traduire les labels ou messages d'erreurs d'un Zend_Form configuré dans un fichier INI ?
Merci d'avance
Hors ligne
Pour les ID des messages il suffit d'aller dans l'API : http://framework.zend.com/apidoc/core/ et d'ouvrir la classe Zend_Validate, tout est là.
Sinon dans son source dans le ZF.
Pour le translate directement dans le INI il semble que ce ne soit pas possible, en espérant que ça évolue.
Personnellement je n'aime pas avoir une partie de mon formulaire dans un fichier et la partie traduction dans le code...
Hors ligne
Ben moi en fait je transmet en général mes messages au form en mettant les clés (de mon translator) dasn les labels, après je passe l'objet translator au form qui se débrouille.
J'ai un classe qui surcharge Zend_Form et qui transmet tout seul le translator s'il existe (tout comme le helper de vue translate(), j'utilise Zend_Registry::get('Zend_Translate').
C'est facile est avec cette solution, tu dois pouvoir avoir tes clés de messages dans ton .ini et pas de code spécifique pour chaque form. Non?
Hors ligne
Hello,
Le comportement par défaut de Zend_Form sans surcharge nécessaire est de chercher un objet Zend_Translate dans le registre (paramétré auparavant par Zend_Registry::get('Zend_Translate')).
A+
Hors ligne
Bonjour,
merci pour les informations,
alors pour Zend_Translate ça marche bien pour les modules Array ou encore Csv saufs bien sûr Gettext. J'ai essayé de tricher en mettant dans Poedit > Configuration > Chemins > motclé > .options.label = ".
Ça ne fonctionne pas , dommage, je pense qu'on est obligé de mettre le mot clé entre parenthèses.
Donc du coup je vais sûrement faire un mix de Gettext avec les tableaux ou csv.
Cependant j'ai quand même une solution archaïque pour utiliser Gettext au maximum, c'est de mettre dans un fichier text les mots clés puis parser avec Poedit. C'est bien pratique pour les phrases de validation et presque pas pour les labels de formulaires puisque ça revient presque au même que le csv :
exemple du fichier text en question :
translate->_('stringLengthTooShort')
translate->_('stringLengthTooLong')
translate->_('isEmpty')
translate->_('Mon label 1 :')
translate->_('Mon label 2 :')
enfin voilà je ne sais pas encore mon choix pour les labels de Zend_Form, car le but c'est que mes .ini puissent se changer par des personnes qui ne connaissent pas Zend_Framework. Donc je pense que le plus simple restera de passer mes traductions par un .csv.
Enfin si quelqu'un trouve une bonne solution avec Gettext je suis prenant .
Hors ligne