Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
j'ai un peu avancé sur mon projet ce weekend et j'ai les neurones en compote.
J'ai pas trop envie de chercher 3 heures sur le net alors je me lance(je passe souvent des heures pour trouver une petite info:-)
Pour traduire les messages d'erreurs des validateurs, j'ai utilisé cette methode:
http://blog.lyrixx.info/zend/mettre-en- … framework/
Or, dans mon formulaire d'inscription, j'ai le checkbox suivant pour les Conditions générales de vente:
$this->addElement('checkbox', 'cgv', array(
'validators' => array(
array('GreaterThan', false, array(0,
'messages' => array(
"notGreaterThan" => "Vous devez accepter les CGV!"
))),
),
'required' => true,
'label' => "J'accepte les conditions générales de vente:",
));
mais comme dans mon fichier de traduction j'ai
...
'notGreaterThan' => "'%value%' n'est pas strictement supérieur à '%min%'.",
...
j'ai donc le message d'erreur suivant si la ckeckbox n'est pas cochée:
'0' n'est pas strictement supérieur à '0'.
Comment faire avoir le premier message d'erreur personnalisé tout en gardant la traduction générique?
Merci.
Cyril
Dernière modification par bandit_rouge (05-09-2010 16:39:42)
Hors ligne
Bonjour,
Les validators n'autorisent pas la modification des messages lors de leurs créations.
Pour les modifier tu doit utiliser la fonction setMessage() directement sur l'object validator.
$this->getElement('cgv')->getValidator('GreaterThan')->setMessage('Vous devez accepter les CGV!', 'notGreaterThan');
Néanmoins l'utilisation d'un validator GreaterThan ne me semble pas très adapté.
Hors ligne
Merci pour ta réponse mais cela ne marche pas.
Ta solution fonctionne mais pas dans mon contexte ou la traduction se fait avec zend_translate dans le bootstrap:
01 /**
02 * Initialize Translation
03 *
04 * @return Zend_Translate
05 */
06 public function _initTranslate()
07 {
08 $translate = new Zend_Translate('array', APPLICATION_PATH . '/languages/fr.php', 'fr');
09 Zend_Registry::set('Zend_Translate', $translate);
10 return $translate;
11 }
Avec un fichier PHP global:
J'ai suivi ce tut:
http://blog.lyrixx.info/zend/mettre-en- … framework/
J'ai l'impression que la fonction setmessages() dans mon formulaire est surchargée par le zend_translate dans le bootstrap.
Je ne sais pas si j'explique bien.
Donc y a t-il un moyen de garder cette traduction global tout en personnalisant les messages d'erreurs dans les formulaires?
J'ai pas l'impression que cela soit possible!
Sinon il me faut trouver une autre solution pour valider ma checkbox autre que le validateur greaterthen!
Enfin cela serait quand même bien pratique de pouvoir personnaliser des messages d'erreur au niveau du formulaire!
Cyril
Dernière modification par bandit_rouge (06-09-2010 19:44:35)
Hors ligne
J'ai trouvé un solution qui peut aller:
Dans le controller de mon formulaire je controlle que la checkbox soit coché sinon erreur:
if (!($form->cgv->isChecked())){
$form->cgv->addError('Veuillez accepter les conditions');
$this->view->form = $form;
return ;
}
Voilou!
Si vous avez des pistes pour customiser les messages d'erreur classiques dans un formulaire, ca m'intéresse!
Hors ligne
Sinon essaie ce tuto pour Zend_Translate :
http://alex-tech-adventures.com/develop … slate.html
ça fonctionne super bien de cette façon, ensuite tu crée un fichier avec les éléments du formulaire à traduire :
$translate->_('badCaptcha'); $translate->_('notAlnum'); $translate->_('notAlpha'); ...
Ensuite tu peux créer ton propre validateur :
require_once 'Zend/Validate/Abstract.php'; class My_Validate_CheckCgv extends Zend_Validate_Abstract { const UNVALIDATED_CGV = 'unvalidatedCgv'; protected $_messageTemplates = array( self::UNVALIDATED_CGV => 'You need to validate the "Terms of Use"'); public function isValid($value, $context = null) { // pour pouvoir utiliser '%value%' $this->_setValue($value) // Ici la validation que tu souhaite // $value étant la valeur de l'élément et $context les autres valeurs du formulaire // retourn true si valid et false dans le cas contraire } }
bien sûr, tu devra rajouter $translate->_('unvalidatedCgv') à ton fichier de traduction.
Personnellement je crée des validateurs avec le message en anglais pour ensuite le traduire ce qui garde une certaine cohérence surtout si je suis amené à traduire l'application en plusieurs langues.
Hors ligne
Si tu veux que tes messages d'erreurs soit traduit, il te faut passer ton object Zend_Translate à tes forms et activer la traduction :
$form = new Mon_Form(); $form->setTranslator($translate); $form->getElement('cgv')->getValidator('GreaterThan')->setMessage('Vous devez accepter les CGV!', 'notGreaterThan'); //Puis tu fait ta routine normal avec ton isVali... $form->isValid($values);
Hors ligne
Pages: 1