Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 05-09-2010 16:38:26

bandit_rouge
Membre
Date d'inscription: 18-02-2010
Messages: 31

surcharger les messages d'erreur des validateurs?

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

 

#2 06-09-2010 09:39:28

My_Sic
Membre
Date d'inscription: 06-09-2010
Messages: 49
Site web

Re: surcharger les messages d'erreur des validateurs?

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é.


http://www.centurion-project.org: Full stack Framework based on Zend Framework; led by:
http://www.octaveoctave.com: an enthusiastic web agency full of passionate.
http://www.cache-pistache.com: French blog on ZF and SF perfomance

Hors ligne

 

#3 06-09-2010 19:37:43

bandit_rouge
Membre
Date d'inscription: 18-02-2010
Messages: 31

Re: surcharger les messages d'erreur des validateurs?

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

 

#4 06-09-2010 20:09:40

bandit_rouge
Membre
Date d'inscription: 18-02-2010
Messages: 31

Re: surcharger les messages d'erreur des validateurs?

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

 

#5 07-09-2010 10:39:42

Dede
Membre
Date d'inscription: 26-06-2009
Messages: 99

Re: surcharger les messages d'erreur des validateurs?

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 :

Code:

$translate->_('badCaptcha');
$translate->_('notAlnum');
$translate->_('notAlpha');
...

Ensuite tu peux créer ton propre validateur :

Code:

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.


« Il ne faut pas lier un navire à une seule ancre, ni une vie à un seul espoir. »
Epictète
http://www.noumcreation.com

Hors ligne

 

#6 07-09-2010 10:50:26

My_Sic
Membre
Date d'inscription: 06-09-2010
Messages: 49
Site web

Re: surcharger les messages d'erreur des validateurs?

Si tu veux que tes messages d'erreurs soit traduit, il te faut passer ton object Zend_Translate à tes forms et activer la traduction :

Code:

$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);

http://www.centurion-project.org: Full stack Framework based on Zend Framework; led by:
http://www.octaveoctave.com: an enthusiastic web agency full of passionate.
http://www.cache-pistache.com: French blog on ZF and SF perfomance

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages