Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
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 :
$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)
Hors ligne
Pourquoi ne pas utiliser Zend_Translate plutot ? Ca t'evitera les setMessages() à repetition
Hors ligne
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)
Hors ligne
Ah pardon j'avais pas tout lu dsl
Essaye ca :
$champ->addValidator("int"); $champ->setErrorMessages(array("Votre numéro de téléphone doit être composé de chiffres uniquement."));
Hors ligne
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
Hors ligne
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
Non, seulement au champ voulu, comme celui ci :
$name = $this->createElement('text','name'); $name->addValidator("int") ->setErrorMessages(array("Votre numéro de téléphone doit être composé de chiffres uniquement."));
Hors ligne
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
Alors je ne comprends ce que tu veux dire.
J'ai fais un petit test avec ce 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.
Hors ligne
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 :
$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
Mais tu peux spécifier comme ceci :
->setErrorMessages(array("notAlnum" => "message d'erreur", "alnumInvalid" => "autre message", .....))
Hors ligne
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
Pages: 1