Ich habe den folgenden Code, um ein Eingabefeld für die E-Mail-Adresse des Benutzers zu generieren
%Vor% Jetzt ist das Problem, wenn Benutzer ungültigen Hostnamen für E-Mail eingeben, erzeugt es 3 Fehler. Nehmen wir an, Benutzer geben 'admin @ l' als E-Mail-Adresse ein, und die Fehler werden zu
* 'l' ist kein gültiger Hostname für die E-Mail-Adresse 'admin @ l'
* 'l' stimmt nicht mit der erwarteten Struktur für einen DNS-Hostnamen überein
* 'l' scheint ein lokaler Netzwerkname zu sein, aber lokale Netzwerknamen sind nicht erlaubt
Ich möchte nur, dass es nur einen benutzerdefinierten Fehler anstelle all dieser gibt. Wenn ich die Fehlermeldung "Ungültige E-Mail-Adresse" durch die Methode addErrorMessage einstellt, wird erneut die gleiche Nachricht für die db_validation generiert.
Nun, es ist eine späte Antwort, aber ich denke, ist immer nützlich.
Fügen Sie einfach true als zweiten Parameter von addValidator ()
hinzuVon Zend-Dokumenten ( Ссылка ):
addValidator (Zeile 67)
Fügt am Ende der Kette einen Validator hinzu
Wenn $ breakChainOnFailure wahr ist, dann, wenn der Validator fehlschlägt, der nächste Der Validator in der Kette, falls vorhanden, wird nicht ausgeführt.
return: Bietet eine flüssige Oberfläche
Zugriff: öffentlich
Hier die Unterschrift:
%Vor%Also ist der Code:
%Vor%Sie müssen eine Instanz der Zend_Validate_EmailAddress-Klasse erstellen und die setMessages-Methode aufrufen und dann die von Ihnen gewünschten Nachrichten überschreiben, um diejenigen zu entfernen, von denen Sie erwähnen, dass sie in etwa so aussehen:
%Vor%Ich hoffe, das hilft jemandem: -)
Sie können einen benutzerdefinierten Validator verwenden. Erstellen Sie eine Datei Email.php im Ordner Validieren in Ihrem Ordner library im Stammverzeichnis des Projekts
%Vor%und in Ihrer form.php Datei
%Vor%Weiß nicht, ob es funktioniert oder nicht, aber für mich funktionierte es im Fall von Telefon. Mit freundlicher Genehmigung von Ссылка
Es scheint ein paar Zeilen zu fehlen ...
sollte das wahrscheinlich verwenden: $ mailValidator = new Zend_Validate_EmailAddress ();
Sie können auch einige andere Validierungen durchführen, siehe hier: Ссылка
Die Verwendung eines benutzerdefinierten Validators ist die einzige Möglichkeit, dieses Problem zu vermeiden.
Wenn Sie möchten:
Dann schlage ich vor, dass Sie so etwas tun:
%Vor% $this->getAttrib('user_id')
repräsentiert die aktuelle Benutzer-ID .
Es gibt drei Validatoren hier, alle haben ihren zweiten Parameter $breakOnFailure
auf false
gesetzt, wenn also ein Validator fehlschlägt, werden die anderen nicht aufgerufen.
Der erste Validator ist email , der mein eigener Validator ist:
%Vor%Sie können diesen Validator in Ihrer Bibliothek hinzufügen, beispielsweise in / application / library / My / Validate, und dann hinzufügen %Code% in deine Form. Natürlich müssen Sie "My" durch den Namen Ihrer Bibliothek ersetzen.
Wenn eine E-Mail das falsche Format hat, wird immer die Meldung "Ihre E-Mail-Adresse ist nicht gültig" angezeigt. Wenn Ihre E-Mail zu lang ist und nicht in Ihr Datenbankfeld passt (z. B. VARCHAR (100)), werden Ihre StringLength-Validierungsfehler angezeigt, und im letzten Fall, wenn bereits ein Eintrag in der Datenbank vorhanden ist, nur dieser Fehler wird angezeigt.
Natürlich können Sie Ihrem benutzerdefinierten Validator weitere Methoden hinzufügen und setMessages überladen, so dass Sie Ihre eigenen Nachrichten unabhängig von der Form anzeigen können, an der Sie arbeiten.
Ich hoffe, es kann jemandem helfen!
Tags und Links zend-framework zend-form email-validation zend-form-element