9
votes

Dans un Zend_Form, comment éviter Zend_Validate_email de générer plusieurs erreurs?

Je suis en train de construire une application Zendframework qui, en tant que formulaire de connexion, demandant une adresse électronique et un mot de passe - il semblait logique de valider l'adresse e-mail avant de frapper la base de données avec la tentative de connexion, car un email invalide ne conduirait jamais à un Hit valide. Zend_validate_emailaddress semblait être la bonne façon d'aller, mais j'ai un problème avec elle générant plusieurs erreurs (question en bas, après le code).

Mon formulaire a actuellement le suivant P>

- Your email address is invalid
- 'asda!!!' does not match the expected structure for a DNS hostname
- 'asda!!!' does not appear to be a valid local network name


0 commentaires

3 Réponses :


1
votes

Comme ces messages sont générés par un validateur , je ne pense pas que ce soit possible : - (

Le zend_validate_emailaddress :: isvalid La méthode fait toutes les validations, sur génère les erreurs dans son ensemble, semble-t-il.

Une solution "Hacky" serait d'itérer, dans votre contrôleur, sur les erreurs et supprimez tout sauf le premier, pour chaque champ qui a plus d'un ... mais je n'aime pas vraiment le son de que ...


vous pouvez, bien sûr, hériter que et modifier le comportement par défaut ... mais vous avez déclaré que vous ne vouliez pas faire cela, alors ...


Néanmoins, si je me trompe, et il y a un moyen, je suis très curieux de ça; -)


1 commentaires

En fait, les messages ont été générés par deux validateurs! Zend_validate_hostname a été appelé indirectement par zend_validate_email.



3
votes

Consultez ce Tutoriel par Pádraic Brady sur l'utilisation de zend_form . .

Spécifiquement la section "Étape 4: Manipulation de messages d'erreur avec un décorateur personnalisé"


3 commentaires

Voulez-vous dire en utilisant le traducteur à l'étape 5 facture? Cela semble toujours nécessiter de multiples déclarations de votre message par défaut pour chaque type d'erreur.


Non, je veux dire étape 4. Vous pouvez écrire un décorateur d'erreur personnalisé qui renvoie le message premier à partir du validateur de messagerie que vous souhaitez que vous souhaitez, au lieu d'imploser tous les messages.


Grand lien! On dirait que les décorateurs personnalisés seraient un autre moyen (comparé à la solution de Simonrjones) pour obtenir ce que je veux, bien que cela me rappelle un peu la croquisse de Mosquito Hunting 'de Monty Python ... comme dans, c'est probablement un peu lourdes pour atteindre cette , comparé à la solution de simonrjones.



10
votes

L'élément de formulaire ZEND contient diverses méthodes que vous pouvez utiliser pour personnaliser les messages. Ce n'est pas terriblement clair des documents mais AdderRormSage () définit un seul message d'erreur personnalisé sur la validation échouée.

Votre exemple ressemblerait donc à: xxx

voir http://framework.zend.com/manual/fr/zend.form.elements.html#zend.form.elements.validators.errors


2 commentaires

Merveilleux, merci! En fait, je suis tombé sur cela, mais en quelque sorte supposé que l'ajout d'un message d'erreur invaliderait le formulaire (comme en cela, cela fait partie du moment où vous faites votre propre validation) .. Content de voir que c'est ce simple!


Il peut être déroutant. $ Email-> Addderror ($ Message) définira une erreur et une marque comme invalide, mais $ e-mail -> AdderRormSage ($ message) Il suffit de définir le message, qui remplace les par défaut et ne fait pas t Définir une erreur!