Maison >développement back-end >tutoriel php >PHP Master | Définition des messages d'erreur personnalisés pour zend_form_element
<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>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>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>Le code source ci-dessus, sans aucune règle CSS, rendra comme tel:
<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>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>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>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>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.
<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>
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».
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".
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.
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».
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!