Heim > Backend-Entwicklung > PHP-Tutorial > PHP Master | Festlegen benutzerdefinierter Fehlermeldungen für Zend_Form_Element

PHP Master | Festlegen benutzerdefinierter Fehlermeldungen für Zend_Form_Element

William Shakespeare
Freigeben: 2025-02-25 18:13:08
Original
633 Leute haben es durchsucht

PHP Master | Festlegen benutzerdefinierter Fehlermeldungen für Zend_Form_Element

In diesem Artikel werde ich die Lösung für ein gemeinsames Problem zeigen, das auftritt, wenn ein Entwickler eine nicht englische Website oder Anwendung erstellen muss, die auf dem Zend-Framework basiert. Wie markieren wir ein Feld eines Zend_Form? Welches ist eine Zend_Form_Element als ungültig und zeigt eine oder mehrere benutzerdefinierte Fehlermeldungen an? Das Problem wird hauptsächlich durch die nativen konter-intuitiven Methoden der Zend_Form_Element-Klasse verursacht, die ich genauer erläutern werde. (Beachten Sie das Problem und die hier besprochene Lösung gilt für Zend Framework Version 1.12 und unten.)

Key Takeaways

  • Beim Erstellen einer nicht englischen Website oder Anwendung, die auf Zend Framework basiert, haben Entwickler häufig mit der Markierung eines Feldes einer Zend_Form zu kämpfen, die als ungültig und benutzerdefinierte Fehlermeldungen angezeigt werden. Dies ist hauptsächlich auf die nativen konter-intuitiven Methoden der Zend_Form_Element-Klasse zurückzuführen.
  • Das Standardverhalten des Zend -Frameworks, das dem American Company Zend gehört, besteht darin, Fehlermeldungen in Englisch für jeden Validator anzuzeigen, der durch die Benutzereingabe unterbrochen wird. Entwickler können entweder jede Fehlermeldung des Frameworks übersetzen oder in einer oder mehreren Nachrichten erklären, dass die Eingabe ungültig ist, und Vorschläge zum Einfügen eines akzeptierten Werts anzeigen. Die letztere Option ist weniger kompliziert, insbesondere für kleine und mittelgroße Projekte.
  • Die Lösung für dieses Problem liegt in der Erstellung des Feldes innerhalb der Form (init () -Methode () und der Verwendung der SetRormessages () -Methode in Verbindung mit einer Eigenschaft der Validatoren von Zend Framework, BreakchainonFailure (). Mit dieser Eigenschaft kann der Validierungsprozess unter der ersten fehlgeschlagenen Bedingung stoppen. Dieser Ansatz ermöglicht es dem Formular, nur die benutzerdefinierte Nachricht anzuzeigen, wenn ungültige Eingaben vorliegen.

ein Beispiel

entwickeln Nehmen wir an, Sie haben ein Formular mit verschiedenen Feldern und berücksichtigen nur eines von ihnen, zum Beispiel ein Texteingangsfeld, mit dem ein Benutzer seinen Namen eingeben kann. Die Validatoren, die Sie verwenden können, sind unterschiedlich, aber zum Beispiel begrenzen wir die Länge des Namens und erlauben nur alphabetische Zeichen und Räume. Wenn wir die Zend Framework -Sprache sprechen, verwenden wir die Klassen Zend_validate_StringLength bzw. Zend_validate_alpha. Wie Sie vielleicht bereits wissen, gehört Zend Framework der amerikanischen Firma Zend und so sind alle Nachrichten, die es zeigt, in englischer Sprache. Das Standardverhalten des Frameworks besteht darin, eine oder mehrere Fehlermeldungen für jeden Validator anzuzeigen, der von der Benutzereingabe unterbrochen wird. Für diejenigen, die eine nicht englische Website erstellen, gibt es also zwei Optionen, um Nachrichten von allen Benutzern lesbar zu haben: Übersetzen Sie jede Fehlermeldung des Frameworks oder erläutern Sie in einer oder mehreren Nachrichten, dass die Eingabe ungültig ist, und zeigen Sie Vorschläge zum Einfügen an ein akzeptierter Wert. Die erste Option ist übereinstimmend, insbesondere für kleine und mittelgroße Projekte. Daher zeige ich, wie die zweite Option verwendet wird. Um es einfach zu halten, setzen wir eine einzelne benutzerdefinierte Nachricht fest: „Die Eingabe ist ungültig. Der Wert muss nur alphabetische Zeichen und Räume haben und seine Länge muss zwischen 3 und 50 Zeichen liegen. “

Der Code

Ich werde den Code zeigen, den wir während des Artikels verwenden werden. Erstens ist dies das Formular, das das Eingabefeld für den Namen und die Validatoren enthält, um die Daten zu überprüfen.
<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>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Im Controller prüfen wir, ob das Feld gültig ist, und handeln entsprechend. Normalerweise verwenden Sie den Indexcontroller nicht und haben diese Validierung wahrscheinlich in einem bestimmten Controller. Um das Beispiel zu vereinfachen, werde ich es verwenden.
<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>
Nach dem Login kopieren
Nach dem Login kopieren
Die verwendete Ansicht ist recht einfach; Es zeigt nur die Nachricht und das Formular an.
<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>
Nach dem Login kopieren
Nach dem Login kopieren
Der obige Quellcode ohne CSS -Regel wird als solches als solches gerendert:

PHP Master | Festlegen benutzerdefinierter Fehlermeldungen für Zend_Form_Element

Wenn Sie den ungültigen Wert "88" in das Feld Name einfügen, sehen Sie die Nachrichten:

PHP Master | Festlegen benutzerdefinierter Fehlermeldungen für Zend_Form_Element

Analyse der Methoden des Frameworks

Eine gute Frage ist, ob bereits Methoden zur Verfügung stehen, um sich dieser Art von Situation zu stellen. Die Antwort lautet fast . Ich meine, es gibt Methoden, aber sie funktionieren nicht immer, wie Sie es erwarten (zumindest wie ich erwartet). Die Methoden zur Verwaltung der Fehlermeldungen sind:
  • setErrors (array $ message)
  • setRormessages (Array $ message)
Die Methode setErrors () verfügt nur über einen Parameter, der ein Array ist und ihre Elemente als Nachrichten im Falle einer ungültigen Eingabe verwendet. Ein Beispiel für die Verwendung ist:
<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>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Diese Methode markiert sowie das Anzeigen der angegebenen Zeichenfolge ebenfalls das Feld als ungültig. Es kann zweimal in der Anwendungslogik verwendet werden, hat jedoch ein Verhalten, das für unser Ziel nicht nützlich ist. Die erste ist während der Erstellung des Formularelements (init ()). In diesem Fall wird die Nachricht angezeigt, wenn das Formular geladen wurde und bevor der Benutzer Daten eingefügt hat. Ziemlich unangenehm. In diesem Fall der relevante Teil von Codeänderungen wie folgt:
<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>
Nach dem Login kopieren
Nach dem Login kopieren
Das zweite Mal tritt nach dem Versenden der Informationen während der üblichen Datenvalidierung innerhalb des Controllers auf. Was passiert, ist, dass die benutzerdefinierte Nachricht bei einem Fehler an die Standardmeldungen beigefügt ist. In diesem Fall ändert sich die IndexAction () des Indexcontroller auf diese Weise:
<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>
Nach dem Login kopieren
Nach dem Login kopieren
Genau wie setErrors () nimmt die setRormessages () -Methode als Parameter ein Array von Zeichenfolgen, die dem Benutzer im Falle einer ungültigen Eingabe angezeigt werden. Ein Beispiel für die Verwendung ist:
<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>
Nach dem Login kopieren
Diese Codezeile löst immer noch nicht das Problem. Beucase zeigt entweder die gleiche Fehlermeldung für jede nicht befriedigte Bedingung an oder hat keine Wirkung. Wenn die angezeigte Linie in der init () -Methode verwendet wird, wird die benutzerdefinierte Nachricht im Falle eines Fehlers auf die gleiche Weise so oft angezeigt, wie die Anzahl der von der Benutzereingabe verletzlichen Bedingungen so oft angezeigt wird. Wenn die Linie während der üblichen Datenvalidierung innerhalb des Controllers auf die gleiche Weise eingefügt wird, wird es keinen Einfluss geben. Dies bedeutet, dass die benutzerdefinierte Nachricht nicht angezeigt wird und das Framework nur die Standardnachrichten anzeigt.

entdecken Sie die Lösung

Jetzt geht es darum, zu verstehen, wenn und wie So fügen Sie die benutzerdefinierte Meldung ein, damit der Benutzer einen Vergleich und einen Vorschlag darüber haben kann, welche Werte akzeptiert werden. Auf jeden Fall liegt das When in der Erstellung des Feldes innerhalb der Form (init () -Methode () und wie ist die Vereinigung der SetRormessages () -Methode und der Verwendung einer Eigenschaft der Validatoren von Zend Framework namens BreakchainonFailure () () zurückzuführen. . Letzteres ermöglicht es uns, den Validierungsprozess bei der ersten fehlgeschlagenen Bedingung zu stoppen. Wenn wir fünf Validatoren einrichten, aber der erste fehlschlägt, werden die anderen vier nicht verwendet. Um diese Eigenschaft zu verwenden, die die kleinstmögliche Anzahl von Codezeilen verwendet, ändere ich ein wenig den Code, den ich zu Beginn veranschaulicht habe. Ich füge der Init () -Methode die Codezeile hinzu, die die Methode setErrormessages () verwendet, und nutze eine der möglichen Eingabestellungen, die von SetValidators () akzeptiert werden, die ein Array von Arrays erwartet. Das im Haupt enthaltene Array kann maximal drei Parameter haben, nämlich:
  1. Eine Zeichenfolge (obligatorisch), um den Validator dem Benutzer anzugeben.
  2. ein Boolescher (optional, standardmäßig ist sein Wert falsch), um anzugeben, ob das Framework die Validierung beim ersten Fehler brechen muss oder nicht. So legt dieser Parameter den Wert der Eigenschaft BreakchainonFailure fest, was uns dabei hilft, unser Ziel zu erreichen.
  3. Ein Array von Optionen (optional, standardmäßig ein leeres Array) für jeden ausgewählten Validator
  4. unterschiedlich
Die Verwendung des zweiten Parameters, der für jeden der Validatoren, die Sie verwenden möchten, als wahr übergeben, ist unerlässlich. Nach dem, was wir bisher gesehen haben, ist der resultierende Code:
<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>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Schlussfolgerung

Mit dem obigen Code zeigt das Formular nur die benutzerdefinierte Nachricht an, wenn ungültige Eingaben vorhanden sind. Genau das, was wir wollten! Falls Sie mehr Nachrichten verwenden müssen, beispielsweise Vorschläge in mehreren Phasen, fügen Sie dem Array, das für die SetRormessages () -Methode () () -Methode verwendet wird, einfach weitere Zeichenfolgen hinzu. Bild über Fotolien

häufig gestellte Fragen (FAQs) beim Einstellen benutzerdefinierter Fehlermeldungen für das Zend -Formularelement

Wie kann ich die Fehlermeldung für ein bestimmtes Formularelement in Zend anpassen? Sie können die Methode setMessage () verwenden, um eine benutzerdefinierte Fehlermeldung für einen bestimmten Validator festzulegen. Wenn Sie beispielsweise ein Formularelement mit dem Namen "E -Mail" haben und eine benutzerdefinierte Fehlermeldung dafür festlegen möchten, können Sie dies wie folgt tun:

$ mail = new Zend_form_element_text ('E -Mail');
$ E -Mail-> setLabel ('E -Mail -Adresse')
-> Addvalidator ('Notizty', True)
-> Addvalidator ('EmailAddress');
$ E-Mail-> GetValidator ('Notizty')-> setMessage ('Bitte geben Sie Ihre E-Mail-Adresse ein)
In diesem Beispiel wird die SetMessage () -Methode verwendet Legen Sie eine benutzerdefinierte Fehlermeldung für den Validator "NotEMPY" des Formulars "E -Mail" -Formungselement ein. Zend?

Wenn Sie mehrere benutzerdefinierte Fehlermeldungen für ein Formularelement in Zend festlegen möchten, können Sie die Methode setMessages () verwenden. Diese Methode akzeptiert eine Reihe von Fehlermeldungen. Hier ist ein Beispiel:

$ mail = new Zend_form_element_text ('E -Mail');

$ E -Mail-> setLabel ('E -Mail -Adresse')

-> Addvalidator ('Notimpty', True)
-> Addvalidator ('E-MailAddress');
$ E-Mail-> GetValidator ('NotEMpty')-> setMessages (array (
Zend_valate_notempty :: is_empty => 'Bitte geben Sie Ihre E-Mail-Adresse an. : Invalid => 'Bitte geben Sie eine gültige E -Mail ein Adresse '
));

Wie kann ich eine benutzerdefinierte Fehlermeldung anzeigen, wenn ein Formular die Validierung in Zend fehlschlägt? Diese Methode fügt eine Fehlermeldung hinzu, die angezeigt wird, wenn das Formular die Validierung fehlschlägt. Hier ist ein Beispiel:

$ form = new Zend_Form ();
$ form-> addElement ('text', 'E-Mail', Array (
'Validators' => Array (
Array ('Validator' => 'Notizty', 'Optionen' => Array ('Nachrichten' => 'E -Mail ist erforderlich')),
Array ('Validator' => 'E-MailAddress', 'Optionen' => Array ('Nachrichten' => 'Ungültige E-Mail-Adresse'))
)
));
if (!
$ form-> adderror ('Es gab Fehler in Ihrer Einreichung. Bitte korrigieren Sie sie und versuchen Sie es erneut.') Wird verwendet, um eine benutzerdefinierte Fehlermeldung hinzuzufügen, die angezeigt wird, wenn das Formular die Validierung fehlschlägt.

Wie kann ich die Standardfehlermeldungen in Zend ändern? Mit der Methode setMessage (). Mit dieser Methode können Sie eine benutzerdefinierte Fehlermeldung für einen bestimmten Validator festlegen. Hier ist ein Beispiel:

$ mail = new Zend_form_element_text ('E -Mail');

$ E -Mail-> setLabel ('E -Mail -Adresse')

-> Addvalidator ('Notimpty', True)

-> Addvalidator ('E-MailAddress'); setMessage ('Bitte geben Sie eine gültige E -Mail -Adresse ein)

In diesem Beispiel wird die Methode setMessage () verwendet, um die Standardfehlermeldungen für die zu ändern "Notizty" und "E -MailAddress" Validatoren des Formulars "E -Mail". In Zend sind Sie eine benutzerdefinierte Fehlermeldung dafür festzulegen, indem Sie die Methoden SetRequired () und AdderRormessage () verwenden. Hier ist ein Beispiel:

$ mail = new Zend_form_element_text ('E -Mail'); ('E -Mail ist erforderlich'); Adderrormessage () Methode wird verwendet, um eine benutzerdefinierte Fehlermeldung dafür festzulegen.

Das obige ist der detaillierte Inhalt vonPHP Master | Festlegen benutzerdefinierter Fehlermeldungen für Zend_Form_Element. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage