


PHP Master | Définition des messages d'erreur personnalisés pour zend_form_element
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></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></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></span>Le code source ci-dessus, sans aucune règle CSS, rendra comme tel:
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)
<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></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></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></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></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.
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:- une chaîne (obligatoire) pour spécifier le validateur à l'utilisateur.
- 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.
- Un tableau d'options (facultatif, par défaut, un tableau vide) différent pour chaque validateur choisi
<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></span>
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 FotoliaQuestions 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!

Des méthodes efficaces pour empêcher les attaques fixes de session incluent: 1. Régénérer l'ID de session après que l'utilisateur se connecte; 2. Utilisez un algorithme de génération d'ID de session sécurisé; 3. Mettre en œuvre le mécanisme de délai d'expiration de la session; 4. Cryptez les données de session à l'aide de HTTPS. Ces mesures peuvent garantir que l'application est indestructible lorsqu'il est confronté à des attaques fixes de session.

La mise en œuvre d'authentification sans session peut être réalisée à l'aide de JSONWebtokens (JWT), un système d'authentification basé sur des jetons où toutes les informations nécessaires sont stockées dans le jeton sans stockage de session côté serveur. 1) Utilisez JWT pour générer et vérifier les jetons, 2) Assurez-vous que HTTPS est utilisé pour empêcher les jetons d'être interceptés, 3) stocker en toute sécurité les jetons du côté client, 4) Vérifiez les jetons du côté serveur pour empêcher la falsification, 5) implémenter des mécanismes de révocation des jetons, comme l'utilisation des jetons d'accès à court terme et des jetons à long terme.

Les risques de sécurité des séances PHP incluent principalement le détournement de session, la fixation de session, la prédiction de session et l'empoisonnement de session. 1. Le détournement de session peut être évité en utilisant HTTPS et en protégeant les cookies. 2. La fixation de la session peut être évitée en régénérant l'ID de session avant que l'utilisateur ne se connecte. 3. La prédiction de session doit assurer l'aléatoire et l'imprévisibilité des ID de session. 4. L'empoisonnement de la session peut être évité en vérifiant et en filtrant les données de session.

Pour détruire une session PHP, vous devez d'abord démarrer la session, puis effacer les données et détruire le fichier de session. 1. Utilisez session_start () pour démarrer la session. 2. Utilisez session_unset () pour effacer les données de session. 3. Enfin, utilisez Session_Destroy () pour détruire le fichier de session pour assurer la sécurité des données et la version des ressources.

Comment modifier le chemin d'enregistrement de la session par défaut de PHP? Il peut être réalisé via les étapes suivantes: utilisez session_save_path ('/ var / www / sessions'); session_start (); Dans PHP Scripts pour définir le chemin de sauvegarde de session. Set session.save_path = "/ var / www / sessions" dans le fichier php.ini pour modifier le chemin d'enregistrement de session globalement. Utilisez Memcached ou Redis pour stocker des données de session, telles que ini_set ('session.save_handler', 'memcached'); ini_set (

TomodifyDatainaphPSession, startTheSessionwithSession_start (), puis utilisez $ _sessiontoset, modifiez, orremovevariables.1) startTheSession.2) setorModifySessionVariblesusing $ _Session.3) retireVariableswithunset (). 4) ClearAllVariblesWithSession_unset (). 5).

Les tableaux peuvent être stockés en séances PHP. 1. Démarrez la session et utilisez session_start (). 2. Créez un tableau et stockez-le en $ _SESSION. 3. Récupérez le tableau via $ _SESSION. 4. Optimiser les données de session pour améliorer les performances.

La collecte de déchets de session PHP est déclenchée par un mécanisme de probabilité pour nettoyer les données de session expirées. 1) définir le cycle de vie de probabilité de déclenchement et de session dans le fichier de configuration; 2) Vous pouvez utiliser des tâches CRON pour optimiser les applications de haute charge; 3) Vous devez équilibrer la fréquence et les performances de collecte des ordures pour éviter la perte de données.


Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

DVWA
Damn Vulnerable Web App (DVWA) est une application Web PHP/MySQL très vulnérable. Ses principaux objectifs sont d'aider les professionnels de la sécurité à tester leurs compétences et leurs outils dans un environnement juridique, d'aider les développeurs Web à mieux comprendre le processus de sécurisation des applications Web et d'aider les enseignants/étudiants à enseigner/apprendre dans un environnement de classe. Application Web sécurité. L'objectif de DVWA est de mettre en pratique certaines des vulnérabilités Web les plus courantes via une interface simple et directe, avec différents degrés de difficulté. Veuillez noter que ce logiciel

Version crackée d'EditPlus en chinois
Petite taille, coloration syntaxique, ne prend pas en charge la fonction d'invite de code

MinGW - GNU minimaliste pour Windows
Ce projet est en cours de migration vers osdn.net/projects/mingw, vous pouvez continuer à nous suivre là-bas. MinGW : un port Windows natif de GNU Compiler Collection (GCC), des bibliothèques d'importation et des fichiers d'en-tête librement distribuables pour la création d'applications Windows natives ; inclut des extensions du runtime MSVC pour prendre en charge la fonctionnalité C99. Tous les logiciels MinGW peuvent fonctionner sur les plates-formes Windows 64 bits.

Listes Sec
SecLists est le compagnon ultime du testeur de sécurité. Il s'agit d'une collection de différents types de listes fréquemment utilisées lors des évaluations de sécurité, le tout en un seul endroit. SecLists contribue à rendre les tests de sécurité plus efficaces et productifs en fournissant facilement toutes les listes dont un testeur de sécurité pourrait avoir besoin. Les types de listes incluent les noms d'utilisateur, les mots de passe, les URL, les charges utiles floues, les modèles de données sensibles, les shells Web, etc. Le testeur peut simplement extraire ce référentiel sur une nouvelle machine de test et il aura accès à tous les types de listes dont il a besoin.

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit
