Maison > développement back-end > tutoriel php > PHP Master | Définition des messages d'erreur personnalisés pour zend_form_element

PHP Master | Définition des messages d'erreur personnalisés pour zend_form_element

William Shakespeare
Libérer: 2025-02-25 18:13:08
original
633 Les gens l'ont consulté

PHP Master | Définition des messages d'erreur personnalisés pour zend_form_element

Dans cet article, je vais montrer la solution à un problème commun qui se pose lorsqu'un développeur doit créer un site Web ou une application non anglais qui est basé sur le cadre Zend. Comment marquer un champ de zend_form Quel est un zend_form_element comme invalide, montrant un ou plusieurs messages d'erreur personnalisés? Le problème est principalement causé par les méthodes contre-intuitives natives de la classe Zend_Form_element que je vais expliquer plus en détail. (Remarquez le problème et la solution discutée ici est valide pour Zend Framework version 1.12 et ci-dessous.)

Les plats clés

  • Lors de la création d'un site Web ou d'une application non anglophone basé sur le framework Zend, les développeurs ont souvent du mal à marquer un champ de Zend_Form, qui est un Zend_Form_Element, comme invalide et affichant des messages d'erreur personnalisés. Cela est principalement dû aux méthodes contre-intuites natives de la classe zend_form_element.
  • Le comportement par défaut du framework Zend, appartenant à la société américaine Zend, consiste à afficher les messages d'erreur en anglais pour chaque validateur brisé par entrée utilisateur. Les développeurs peuvent soit traduire chaque message d'erreur du cadre ou expliquer dans un ou plusieurs messages que l'entrée n'est pas valide et afficher des suggestions pour insérer une valeur acceptée. Cette dernière option est moins compliquée, en particulier pour les petits et moyens projets.
  • La solution à ce problème réside dans la création du champ à l'intérieur de la méthode Form (init ()) et l'utilisation de la méthode SetErrorMessages () en conjonction avec une propriété des validateurs du framework Zend appelé BrekchainOnFailure (). Cette propriété permet au processus de validation de s'arrêter à la première condition échouée. Cette approche permet au formulaire d'afficher uniquement le message personnalisé lorsqu'il y a une entrée non valide.

Développer un exemple

Disons que vous avez un formulaire avec différents champs et prenez en compte un seul d'entre eux, par exemple un champ de saisie de texte utilisé pour permettre à un utilisateur de saisir son nom. Les validateurs que vous pouvez utiliser sont différents, mais par exemple, nous limiterons la longueur du nom et ne permettra que des caractères et des espaces alphabétiques. En parlant de la langue du framework Zend, nous utiliserons respectivement les classes zend_validate_stringlength et les classes zend_validate_alpha. Comme vous le savez peut-être déjà, Zend Framework appartient à la société américaine Zend et donc tous les messages qu'il montre en anglais. Le comportement par défaut du framework consiste à afficher un ou plusieurs messages d'erreur pour chaque validateur rompu par l'entrée utilisateur. Ainsi, pour ceux qui construisent un site Web non anglais, il existe deux options pour que les messages lisibles par tous les utilisateurs: traduisez chaque message d'erreur du cadre, ou expliquer dans un ou plusieurs messages que l'entrée est invalide et affiche des suggestions pour insérer une valeur acceptée. La première option est trop compliquée, en particulier pour les petits et moyens projets, donc je vais montrer comment utiliser la deuxième option. Pour rester facile, nous définirons un seul message personnalisé: «L'entrée n'est pas valide. La valeur ne doit avoir que des caractères alphabétiques et des espaces et sa longueur doit être comprise entre 3 et 50 caractères. "

le code

Je vais montrer le code que nous utiliserons pendant l'article. Tout d'abord, c'est le formulaire qui contient le champ de saisie du nom et les validateurs nécessaires pour vérifier les données.
<span><span><?php
</span></span><span><span>class Application_Form_User extends Zend_Form
</span></span><span><span>{
</span></span><span>    <span>public function init() {
</span></span><span>        <span>// create the field
</span></span><span>        <span>$element = new Zend_Form_Element_Text("name");
</span></span><span>        <span>$element->setLabel("Name");
</span></span><span>
</span><span>        <span>// set the validators
</span></span><span>        <span>$element->setValidators(array(
</span></span><span>            <span>new Zend_Validate_Alpha(true),
</span></span><span>            <span>new Zend_Validate_StringLength(
</span></span><span>                <span>array("min" => 3, "max" => 50))
</span></span><span>        <span>));
</span></span><span>        <span>$element->setRequired();
</span></span><span>
</span><span>        <span>// add the element to the form
</span></span><span>        <span>$this->addElement($element);
</span></span><span>
</span><span>        <span>// add a submit button
</span></span><span>        <span>$element = new Zend_Form_Element_Submit("submit");
</span></span><span>        <span>$element->setLabel("Submit");
</span></span><span>        <span>$this->addElement($element);
</span></span><span>    <span>}
</span></span><span><span>}</span></span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Dans le contrôleur, nous vérifierons si le champ est valide et agira en conséquence. Habituellement, vous n'utiliserez pas l'indexController et vous avez probablement cette validation dans un contrôleur spécifique. Quoi qu'il en soit, pour simplifier l'exemple, je vais l'utiliser.
<span><span><?php
</span></span><span><span>class IndexController extends Zend_Controller_Action
</span></span><span><span>{
</span></span><span>    <span>public function init() {
</span></span><span>    <span>}
</span></span><span>
</span><span>    <span>public function indexAction() {
</span></span><span>        <span>$form = new Application_Form_User();
</span></span><span>
</span><span>        <span>if ($this->getRequest()->isPost() &&
</span></span><span>            <span>$form->isValid($this->getRequest()->getPost())) {
</span></span><span>            <span>$this->view->message = "Valid input";
</span></span><span>        <span>}
</span></span><span>        <span>else {
</span></span><span>            <span>$this->view->form = $form;
</span></span><span>        <span>}
</span></span><span>    <span>}
</span></span><span><span>}</span></span>
Copier après la connexion
Copier après la connexion
La vue utilisée est assez simple; Il montre uniquement le message et le formulaire.
<span><span><?php
</span></span><span><span>if (isset($this->message)) {
</span></span><span>    <span>echo $this->message;
</span></span><span><span>}
</span></span><span><span>if (isset($this->form)) {
</span></span><span>    <span>echo $this->form;
</span></span><span><span>}</span></span>
Copier après la connexion
Copier après la connexion
Le code source ci-dessus, sans aucune règle CSS, rendra comme tel:

PHP Master | Définition des messages d'erreur personnalisés pour zend_form_element

De plus, si vous insérez la valeur non valide «88» dans le champ Nom, vous verrez les messages:

PHP Master | Définition des messages d'erreur personnalisés pour zend_form_element

Analyse des méthodes du cadre

Une bonne question à poser est de savoir s'il existe déjà des méthodes disponibles pour faire face à ce type de situation. La réponse est presque . Je veux dire qu'il existe des méthodes, mais ils ne fonctionnent pas toujours comme vous vous y attendez (du moins comme je m'attends). Les méthodes pour gérer les messages d'erreur sont:
  • setErrors (array $ messages)
  • SetTerrorMessages (Array $ messages)
La méthode setErrors () n'a qu'un seul paramètre qui est un tableau et utilise ses éléments comme messages à afficher en cas d'entrée non valide. Un exemple de son utilisation est:
<span><span><?php
</span></span><span><span>class Application_Form_User extends Zend_Form
</span></span><span><span>{
</span></span><span>    <span>public function init() {
</span></span><span>        <span>// create the field
</span></span><span>        <span>$element = new Zend_Form_Element_Text("name");
</span></span><span>        <span>$element->setLabel("Name");
</span></span><span>
</span><span>        <span>// set the validators
</span></span><span>        <span>$element->setValidators(array(
</span></span><span>            <span>new Zend_Validate_Alpha(true),
</span></span><span>            <span>new Zend_Validate_StringLength(
</span></span><span>                <span>array("min" => 3, "max" => 50))
</span></span><span>        <span>));
</span></span><span>        <span>$element->setRequired();
</span></span><span>
</span><span>        <span>// add the element to the form
</span></span><span>        <span>$this->addElement($element);
</span></span><span>
</span><span>        <span>// add a submit button
</span></span><span>        <span>$element = new Zend_Form_Element_Submit("submit");
</span></span><span>        <span>$element->setLabel("Submit");
</span></span><span>        <span>$this->addElement($element);
</span></span><span>    <span>}
</span></span><span><span>}</span></span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Cette méthode, ainsi que l'affichage des chaînes données, marquent également le champ invalide. Il peut être utilisé à deux fois dans la logique d'application, mais dans les deux, il a un comportement qui n'est pas utile pour notre objectif. Le premier est lors de la création de l'élément de forme (méthode init ()). Dans ce cas, le message est affiché lorsque le formulaire a été chargé et avant que l'utilisateur n'ait inséré des données. Assez désagréable. Dans ce cas, la partie pertinente du code change comme ceci:
<span><span><?php
</span></span><span><span>class IndexController extends Zend_Controller_Action
</span></span><span><span>{
</span></span><span>    <span>public function init() {
</span></span><span>    <span>}
</span></span><span>
</span><span>    <span>public function indexAction() {
</span></span><span>        <span>$form = new Application_Form_User();
</span></span><span>
</span><span>        <span>if ($this->getRequest()->isPost() &&
</span></span><span>            <span>$form->isValid($this->getRequest()->getPost())) {
</span></span><span>            <span>$this->view->message = "Valid input";
</span></span><span>        <span>}
</span></span><span>        <span>else {
</span></span><span>            <span>$this->view->form = $form;
</span></span><span>        <span>}
</span></span><span>    <span>}
</span></span><span><span>}</span></span>
Copier après la connexion
Copier après la connexion
La deuxième fois se produit après l'envoi des informations lors de la validation des données habituelle au sein du contrôleur. Ce qui se passe, c'est que le message personnalisé est annexé à ceux par défaut lorsqu'une erreur se produit. Dans ce cas, l'indexAction () de l'indexController change de cette manière:
<span><span><?php
</span></span><span><span>if (isset($this->message)) {
</span></span><span>    <span>echo $this->message;
</span></span><span><span>}
</span></span><span><span>if (isset($this->form)) {
</span></span><span>    <span>echo $this->form;
</span></span><span><span>}</span></span>
Copier après la connexion
Copier après la connexion
Tout comme SetErrors (), la méthode SetTerrorMessages () prend en tant que paramètre un tableau de chaînes qui sera montré à l'utilisateur en cas d'entrée non valide. Un exemple de son utilisation est:
<span><span><?php
</span></span><span><span>// set the custom message in the case of an error
</span></span><span><span>$element->setErrors(array("The input is invalid. The value must have only alphabetic characters and spaces and its length must be between 3 and 50 characters."));</span></span>
Copier après la connexion
Cette ligne de code ne résout toujours pas le problème beucase, il affichera le même message d'erreur pour chaque condition non satisfaite, soit elle n'aura aucun effet. Si la ligne indiquée est utilisée dans la méthode init (), de la même manière affichée pour SetErrors (), en cas d'erreur, le message personnalisé sera affiché autant de fois que le nombre de conditions violés par l'entrée utilisateur. Si la ligne est insérée pendant la validation des données habituelle dans le contrôleur, de la même manière expliquée auparavant, il n'y aura aucun effet. Cela signifie que le message personnalisé ne sera pas affiché et que le cadre affichera uniquement les messages par défaut.

Découvrir la solution

Maintenant, le but est de comprendre quand et comment Pour insérer le message personnalisé afin que l'utilisateur puisse avoir une comparaison et une suggestion sur les valeurs acceptées. Certainement, le moment réside dans la création du champ à l'intérieur de la forme (init () méthode) et le comment est dû à l'union de la méthode SetErrorMessages () et à l'utilisation d'une propriété des validateurs du cadre Zend appelé BreakchainOnfailure () . Ce dernier nous permet d'arrêter le processus de validation à la première condition échouée. Si nous créons cinq validateurs mais que les premiers échouent, les quatre autres ne seront pas utilisés. Pour utiliser cette propriété en utilisant le plus petit nombre possible de lignes de code, je vais changer un peu le code que j'ai illustré au début. J'ajouterai à la méthode init () la ligne de code qui utilise la méthode SetTerrorMessages (), et je profiterai de l'une des configurations d'entrée possibles acceptées par setValidators () qui attend un tableau de tableaux. Le tableau contenu dans le principal peut avoir un maximum de trois paramètres, qui sont:
  1. une chaîne (obligatoire) pour spécifier le validateur à l'utilisateur.
  2. Un booléen (facultatif, par défaut, sa valeur est fausse) pour spécifier si le cadre doit casser la validation au premier échec ou non. Ainsi, ce paramètre définit la valeur de la propriété BreakchainOnfailure, ce qui nous aidera à atteindre notre objectif.
  3. Un tableau d'options (facultatif, par défaut, un tableau vide) différent pour chaque validateur choisi
L'utilisation du deuxième paramètre est passée comme vraie pour chacun des validateurs que vous souhaitez utiliser est essentiel. Selon ce que nous avons vu jusqu'à présent, le code résultant est:
<span><span><?php
</span></span><span><span>class Application_Form_User extends Zend_Form
</span></span><span><span>{
</span></span><span>    <span>public function init() {
</span></span><span>        <span>// create the field
</span></span><span>        <span>$element = new Zend_Form_Element_Text("name");
</span></span><span>        <span>$element->setLabel("Name");
</span></span><span>
</span><span>        <span>// set the validators
</span></span><span>        <span>$element->setValidators(array(
</span></span><span>            <span>new Zend_Validate_Alpha(true),
</span></span><span>            <span>new Zend_Validate_StringLength(
</span></span><span>                <span>array("min" => 3, "max" => 50))
</span></span><span>        <span>));
</span></span><span>        <span>$element->setRequired();
</span></span><span>
</span><span>        <span>// add the element to the form
</span></span><span>        <span>$this->addElement($element);
</span></span><span>
</span><span>        <span>// add a submit button
</span></span><span>        <span>$element = new Zend_Form_Element_Submit("submit");
</span></span><span>        <span>$element->setLabel("Submit");
</span></span><span>        <span>$this->addElement($element);
</span></span><span>    <span>}
</span></span><span><span>}</span></span>
Copier après la connexion
Copier après la connexion
Copier après la connexion

Conclusion

En utilisant le code ci-dessus, le formulaire affichera uniquement le message personnalisé lorsqu'il y a une entrée non valide… exactement ce que nous voulions! Dans le cas où vous avez besoin d'utiliser plus de messages, par exemple des suggestions en plusieurs étapes, ajoutez simplement plus de chaînes au tableau utilisé pour la méthode SetTerrorMessages (). Image via Fotolia

Questions fréquemment posées (FAQ) sur la définition des messages d'erreur personnalisés pour l'élément de formulaire zend

Comment puis-je personnaliser le message d'erreur pour un élément de formulaire spécifique dans Zend?

La personnalisation du message d'erreur pour un élément de formulaire spécifique dans Zend est assez simple. Vous pouvez utiliser la méthode setMessage () pour définir un message d'erreur personnalisé pour un validateur spécifique. Par exemple, si vous avez un élément de formulaire nommé 'Email' et que vous souhaitez définir un message d'erreur personnalisé pour cela, vous pouvez le faire comme suit:

$ e-mail = new Zend_form_Element_text ('e-mail');
$ email-> setLabel ('Adresse e-mail')
-> addValidator ('NOTEMPTY', true)
-> addValidator ('e-mailaddress');
$ e-mail-> getValidator ('NOTEMPTY') -> setMessage ('Veuillez saisir votre adresse e-mail');
Dans cet exemple, la méthode SetMessage () est utilisée pour Définissez un message d'erreur personnalisé pour le validateur «Notempty» de l'élément de formulaire «e-mail».

Comment puis-je définir plusieurs messages d'erreur personnalisés pour un élément de formulaire dans Zend?

Si vous souhaitez définir plusieurs messages d'erreur personnalisés pour un élément de formulaire dans Zend, vous pouvez utiliser la méthode SetMessages (). Cette méthode accepte un tableau de messages d'erreur. Voici un exemple:

$ email = new Zend_form_element_text ('e-mail');
$ email-> setLabel ('Adresse e-mail')
-> addValidator ('NOTEMPTY', true)
-> addvalidator ('e-mailaddress');
$ e-mail-> getValidator ('NOTEMPTY') -> setMessages (array (
zend_validate_notempty :: is_empty => 's'il vous plaît entrez votre adresse e-mail',
zend_valida_emailaddress: : Invalid => 'Veuillez saisir un e-mail valide Adresse '
));
Dans cet exemple, la méthode SetMessages () est utilisée pour définir plusieurs messages d'erreur personnalisés pour le validateur "NotherMpty" de l'élément de formulaire "Email".

Comment puis-je afficher un message d'erreur personnalisé lorsqu'un formulaire échoue à la validation dans Zend?

Lorsqu'un formulaire échoue à la validation dans Zend, vous pouvez afficher un message d'erreur personnalisé en utilisant la méthode Adderror (). Cette méthode ajoute un message d'erreur qui sera affiché lorsque le formulaire échoue à la validation. Voici un exemple:

$ form = new Zend_form ();
$ form-> addElement ('text', 'e-mail', array (
'validators' => array (
Array ('Validator' => 'NOTEMPTY', 'OPTIONS' => Array ('Messages' => 'Email est requis')),
array ('validator' => 'EmailAddress', 'Options' => Array ('Messages' => 'Adresse e-mail non valide'))
)
));
if (! $ Form-> isvalid ($ _ post)) {
$ form-> adderror ('il y avait des erreurs dans votre soumission. Veuillez les corriger et réessayer.');
}
Dans cet exemple, le La méthode Adderror () est utilisée pour ajouter un message d'erreur personnalisé qui sera affiché lorsque le formulaire échoue la validation.

Comment puis-je modifier les messages d'erreur par défaut dans Zend?

Vous pouvez modifier le défaut par défaut Messages d'erreur dans Zend en utilisant la méthode setMessage (). Cette méthode vous permet de définir un message d'erreur personnalisé pour un validateur spécifique. Voici un exemple:

$ email = new Zend_form_element_text ('e-mail');
$ email-> setLabel ('Adresse e-mail')
-> addValidator ('NOTEMPTY', true)
-> addvalidator ('e-mailaddress');
$ e-mail-> getValidator ('NotherMpty') -> setMessage ('Veuillez entrer votre adresse e-mail');
$ email-> getValidator ('emailDdress') -> setMessage ('Veuillez entrer une adresse e-mail valide');
Dans cet exemple, la méthode setMessage () est utilisée pour modifier les messages d'erreur par défaut pour le Les validateurs de «notempty» et «e-mail» de l'élément de formulaire «e-mail».

Comment puis-je définir un message d'erreur personnalisé pour un élément de formulaire requis dans Zend?

Si un élément de formulaire est requis dans Zend, vous pouvez définir un message d'erreur personnalisé pour lui en utilisant les méthodes setRequired () et adderrorMessage (). Voici un exemple:

$ email = new Zend_form_Element_text ('e-mail');
$ e-mail-> setLabel ('Adresse e-mail')
-> setRequired (true)
-> adderrorMessage («E-mail est requis»);
Dans cet exemple, la méthode setRequired () est utilisée pour rendre l'élément de formulaire «e-mail» requis, et le La méthode AdderrorMessage () est utilisée pour définir un message d'erreur personnalisé pour celui-ci.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal