Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 01-09-2009 10:09:38

tonton flubb
Membre
Date d'inscription: 11-10-2008
Messages: 48
Site web

Personnaliser un message d'erreur traduit

Bonjour à tous,

Je suis confronté à un petit problème de personnalisation des messages d'erreurs dans mon formulaire. J'utilise la technique proposée ici pour traduire les messages en Français, à savoir une classe qui hérite de Zend_Form et qui "surcharge" les textes.

Pour l'un de mes champs de formulaire, j'ajoute un validateur Int pour un champ "Téléphone" et je veux personnaliser le message comme suit :

Code:

$validateur = new Zend_Validate_Int();
$validateur->setMessage('Votre numéro de téléphone doit être composé de chiffres uniquement.', Zend_Validate_Int::NOT_INT);

$champ->addValidator($validateur);

L'erreur est bien générée mais c'est le message traduit dans la classe héritée qui s'affiche, et non mon texte personnalisé ... Comment puis-je faire pour écraser ce message d'erreur ?

D'avance je vous remercie.
Bonne journée, Florent

Dernière modification par tonton flubb (01-09-2009 10:28:19)


Florent - Développeur Web

Hors ligne

 

#2 01-09-2009 11:07:05

alien7
Membre
Date d'inscription: 29-04-2007
Messages: 447

Re: Personnaliser un message d'erreur traduit

Pourquoi ne pas utiliser Zend_Translate plutot ? Ca t'evitera les setMessages() à repetition


ZF 2.3 - Twitter Bootstrap 3.2
Local: Ubuntu  -> Apache2 2.4 - MariaDB 10 - PHP 5.6

Hors ligne

 

#3 01-09-2009 11:15:44

tonton flubb
Membre
Date d'inscription: 11-10-2008
Messages: 48
Site web

Re: Personnaliser un message d'erreur traduit

J'utilise Zend_Translate dans le constructeur de ma classe My_Form qui hérite de Zend_Form donc je n'utilise pas la méthode setMessage à répétition.

Dans les cas génériques, un champ possédant un validateur Int me génèrera un message d'erreur du style "Vous devez saisir un nombre entier". Ce que je veux c'est que juste pour le champ en question le message devienne "Votre numéro de téléphone doit être composé de chiffres uniquement.".

Dernière modification par tonton flubb (01-09-2009 11:16:17)


Florent - Développeur Web

Hors ligne

 

#4 01-09-2009 11:53:15

alien7
Membre
Date d'inscription: 29-04-2007
Messages: 447

Re: Personnaliser un message d'erreur traduit

Ah pardon j'avais pas tout lu dsl

Essaye ca :

Code:

$champ->addValidator("int");
$champ->setErrorMessages(array("Votre numéro de téléphone doit être composé de chiffres uniquement."));

ZF 2.3 - Twitter Bootstrap 3.2
Local: Ubuntu  -> Apache2 2.4 - MariaDB 10 - PHP 5.6

Hors ligne

 

#5 01-09-2009 12:02:14

tonton flubb
Membre
Date d'inscription: 11-10-2008
Messages: 48
Site web

Re: Personnaliser un message d'erreur traduit

Super ça marche impeccablement ! Je ne pensais pas du tout à chercher du côté de l'élément du formulaire, pourtant c'est logique !

Merci pour ton aide et bonne journée.
Florent


Florent - Développeur Web

Hors ligne

 

#6 16-09-2009 16:48:22

_Raynor_
Membre
Date d'inscription: 11-09-2008
Messages: 28

Re: Personnaliser un message d'erreur traduit

Je me permet de rebondir sur ce message pour indiquer que cette méthode remplace complètement la liste des messages d'erreurs sur un Zend_Form_Element
Imaginons le cas suivant :
Le Zend_Form_Element a 4 validateurs.
Si on rajoute 3 messages d'erreur avec Zend_Form_Element::setErrorMessages(), dès la moindre erreur : ce sont les 3 messages d'erreurs qui seront affichés (quelque soit le validateur ayant détecté l'erreur).

Hors ligne

 

#7 17-09-2009 00:30:14

alien7
Membre
Date d'inscription: 29-04-2007
Messages: 447

Re: Personnaliser un message d'erreur traduit

Non, seulement au champ voulu, comme celui ci :

Code:

$name = $this->createElement('text','name');
$name->addValidator("int")
    ->setErrorMessages(array("Votre numéro de téléphone doit être composé de chiffres uniquement."));

ZF 2.3 - Twitter Bootstrap 3.2
Local: Ubuntu  -> Apache2 2.4 - MariaDB 10 - PHP 5.6

Hors ligne

 

#8 17-09-2009 01:35:13

_Raynor_
Membre
Date d'inscription: 11-09-2008
Messages: 28

Re: Personnaliser un message d'erreur traduit

alien7 a écrit:

Non, seulement au champ voulu, comme celui ci :

Je ne comprends pas. C'est bien ce que j'ai dit :

_Raynor_ a écrit:

cette méthode remplace complètement la liste des messages d'erreurs sur un Zend_Form_Element

Hors ligne

 

#9 17-09-2009 10:57:32

alien7
Membre
Date d'inscription: 29-04-2007
Messages: 447

Re: Personnaliser un message d'erreur traduit

Alors je ne comprends ce que tu veux dire.
J'ai fais un petit test avec ce code :

Code:

$name = $this->createElement('text','name');
$name->addValidator("int")
    ->setErrorMessages(array("Votre numéro de téléphone doit être composé de chiffres uniquement."));

$name2 = $this->createElement('text','name2');
$name2->addValidator("int");

Et bien les messages d'erreurs sont différents, alors qu'ils ont le même validator. En même temps j'utilise Zend-Translate avec zend_form. Comme je l'ai dis je fais ptete fausse route, peut etre je n'ai pas compris ou tu voulais en venir.


ZF 2.3 - Twitter Bootstrap 3.2
Local: Ubuntu  -> Apache2 2.4 - MariaDB 10 - PHP 5.6

Hors ligne

 

#10 17-09-2009 11:23:38

_Raynor_
Membre
Date d'inscription: 11-09-2008
Messages: 28

Re: Personnaliser un message d'erreur traduit

Ce que je veux dire c'est qu'avec plusieurs Validators sur un même Form_Element, définir ses propres messages fait que ces derniers seront tous retournés comme message d'erreur suite à l'appel de Zend_Form_Element::isValid().
Exemple :

Code:

$name = $this->createElement('text','name');
$name->addValidator(new Zend_Validate_StringLength(0, 10))
    ->addValidator(new Zend_Validate_Int())
    ->setErrorMessages(array("Votre numéro de téléphone doit être composé de chiffres uniquement."));

Tenter de valider la valeur "562" pour $name retournera : Votre numéro de téléphone doit être composé de chiffres uniquement. (alors que le "562" n'est composé que de chiffres).

Ce que je veux dire c'est que si tu regarde le code de Zend_Form_Element::isValid() tu vois très clairement que les messages d'erreurs (rajoutés à Zend_Form_Element::$_messages sont :
- soit tout ceux que tu as fourni avec setErrorMessages() sans s'occuper de ceux retournés par le Validator
- soit celui ou ceux du Validator ayant trouvé l'erreur et uniquement de celui-ci

Dernière modification par _Raynor_ (17-09-2009 11:24:20)

Hors ligne

 

#11 17-09-2009 12:07:14

alien7
Membre
Date d'inscription: 29-04-2007
Messages: 447

Re: Personnaliser un message d'erreur traduit

Mais tu peux spécifier comme ceci :

Code:

->setErrorMessages(array("notAlnum" => "message d'erreur", "alnumInvalid" => "autre message", .....))

ZF 2.3 - Twitter Bootstrap 3.2
Local: Ubuntu  -> Apache2 2.4 - MariaDB 10 - PHP 5.6

Hors ligne

 

#12 17-09-2009 14:43:48

_Raynor_
Membre
Date d'inscription: 11-09-2008
Messages: 28

Re: Personnaliser un message d'erreur traduit

Tu es sûr ?
Zend_Form_Element::setErrorMessages(array $messages) fait appel à Zend_Form_Element::addErrorMessages(array $messages) qui lui appelle Zend_Form_Element::addErrorMessages(string $message) sur chaque éléments de $messages.
Toute clé fournie dans $messages est donc totalement oubliée.

(Je précise que j'utilise la version 1.9.2 du Zend Framework)

Dernière modification par _Raynor_ (17-09-2009 14:44:30)

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