zend Formular E-Mail-Validierung

8

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.

    
Bryan 17.12.2010, 10:47
quelle

5 Antworten

8

Nun, es ist eine späte Antwort, aber ich denke, ist immer nützlich.

Fügen Sie einfach true als zweiten Parameter von addValidator ()

hinzu

Von 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%     
Ivan Buttinoni 29.03.2011, 07:56
quelle
5

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: -)

    
Eric 26.06.2011 19:52
quelle
2
%Vor%

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 Ссылка

    
Santosh Linkha 21.12.2010 07:46
quelle
0

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: Ссылка

    
Roy Toledo 26.01.2011 12:29
quelle
0

Die Verwendung eines benutzerdefinierten Validators ist die einzige Möglichkeit, dieses Problem zu vermeiden.

Wenn Sie möchten:

  • Nur eine Fehlermeldung, wenn die E-Mail-Adresse ein falsches Format hat
  • Wenn das Format gut ist, überprüfen Sie, ob die E-Mail-Adresse bereits in der Datenbank vorhanden ist

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!

    
Liyali 15.01.2012 09:52
quelle