Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Yii
Code

Programmieren mit Yii2: Spezialisierte Validierungen

by
Difficulty:IntermediateLength:LongLanguages:
This post is part of a series called How to Program With Yii2.
How to Program With Yii2: Validations
How to Program With Yii2: AuthClient Integration With Twitter & Google

German (Deutsch) translation by Władysław Łucyszyn (you can also view the original English article)

Final product image
What You'll Be Creating

Wenn Sie fragen: "Was ist Yii?" Sehen Sie sich mein früheres Tutorial an: Einführung in das Yii Framework, das die Vorteile von Yii beschreibt und eine Übersicht über die Neuerungen in Yii 2.0 enthält, die im Oktober 2014 veröffentlicht wurden.

In dieser Programmierserie mit Yii2 leite ich die Leser beim Einsatz des neu aktualisierten Yii2-Frameworks für PHP. Dieses Tutorial ist unser zweiter Teil und betrachtet die Validatoren von Yii2Validierer vereinfachen den Code, der zur Validierung der Eingabe erforderlich ist, d. H. Die Konformität oder Nichtübereinstimmung der Dateneingabe, typischerweise von Benutzern über Webformulare.  Insbesondere werden wir einige der integrierten Spezialvalidierungen untersuchen, die bei der Webentwicklung üblich sind. 

Hier eine Liste der integrierten Yii-Validatoren und Links zu der Dokumentation, die wir untersuchen werden:

  • CaptchaValidator: Überprüft ein CAPTCHA-Formularüberprüfungsfeld. 
  • CompareValidator: Vergleicht zwei Werte aus der Form oder einer Konstante, z. x muss kleiner als 99 sein. 
  • EmailValidator: Stellt sicher, dass ein Wert eine gültige E-Mail-Adresse ist.
  • ExistValidator: Stellt sicher, dass ein Wert in einer anderen Tabelle vorhanden ist.
  • FileValidator: Stellt sicher, dass eine hochgeladene Datei vorhanden ist. 
  • ImageValidator: Überprüft die Bild- und Bildeigenschaften. 
  • RangeValidator: Stellt sicher, dass sich ein Wert innerhalb einer Liste von Werten befindet. 
  • RegularExpressionValidator: Führt die Validierung anhand einer durch einen regulären Ausdruck definierten Bedingung durch.
  • UniqueValidator: Stellt sicher, dass der Wert innerhalb einer Tabelle eindeutig ist, beispielsweise eine E-Mail-Adresse. 
  • UrlValidator: Stellt sicher, dass der Wert im URL-Format vorliegt, z. http://ihredomain.com.

Ich werde Sie durch Beispiele für jede dieser Validierungen führen, wobei die Hello-Anwendungscodebase aus früheren Tutorials und ein paar aus unserer Building Your Startup Series verwendet wird, die ebenfalls Yii2 verwendet. Verwenden Sie die GitHub-Links auf dieser Seite, um den Code zu erhalten. 

Nur zur Erinnerung, ich beteilige mich an den Kommentarthreads unten. Ich bin besonders interessiert, wenn Sie weitere Ideen haben oder Themen für zukünftige Tutorials vorschlagen möchten. Sie können mich auch @ Twitter auf Twitter erreichen oder mich bei Lookahead Consulting per E-Mail kontaktieren. 

Was ist ein Validator?

Wenn Sie ein Webentwickler sind, wissen Sie wahrscheinlich, dass Benutzereingaben nicht vertrauenswürdig sind. Zum Beispiel können Benutzer SQL-Injektionstechniken verwenden, um Abfragen auszuführen, die Kennwörter ändern oder freigeben.  Jemand hat einmal die SQL-Injection gegen meine Open Source PHPList-Installation eingesetzt und es geschafft, eines meiner Passwörter zu ermitteln (PHPList hat diese in Klartext gespeichert).  Normalerweise möchten Sie nur sicherstellen, dass die von Benutzern bereitgestellten Daten den Typen, Formularen und Bereichen Ihrer Anwendung entsprechen. 

Das Erstellen von Validatoren in PHP von Hand erfordert Zeit. Das Yii Framework bietet eine Vielzahl von Grundüberprüfungsfunktionen, so dass sie nicht von Grund auf neu erstellt werden müssen. Wenn Sie jedoch einige benutzerdefinierte Erweiterungen benötigen, ist das ebenfalls unkompliziert. 

Validierungen sind ein weiterer Grund, warum es meiner Meinung nach immer sinnvoll ist, Anwendungen auf einem Webframework wie Yii zu erstellen, anstatt auf Vanilla PHP.

In früheren Episoden haben wir auch viel über Yiis Code-Generator Gii gesprochen. Einer der Vorteile von Gii ist, dass basierend auf den SQL-Typdefinitionen im Schema die entsprechenden Validierungsregeln für Ihre Modelle geschrieben werden. 

Dies ist eine große Zeitersparnis. Vielleicht möchten Sie zu unserer letzten Episode zurückkehren, um mehr über die grundlegenden Typvalidierungen von Yii2 zu erfahren

Beginnen wir nun mit dem nächsten Satz der eingebauten Validatoren von Yii2. 

Die nächsten Validatoren

Der Captcha-Validator 

Beginnen wir mit CaptchaValidator, der prüft, ob eine korrekte Antwort auf ein CAPTCHA-Überprüfungsfeld vorliegt. CAPTCHAs helfen sicherzustellen, dass ein Mensch das Formular ausfüllt, und hoffentlich verhindern, dass automatisierte Skripte es senden. 

Hier ist ein Beispiel für das Yii Captcha in Aktion:

Yii2 Validators CAPTCHA Validator

Yii2 Validators CAPTCHA Validator In unserer Hello-Codebasis habe ich unser Beispielformular vereinfacht, um nur die Felder "Gedanken" und "Captcha" einzubeziehen.

Hier sehen Sie die Regeldefinitionen des Modellcodes: Das Captcha ist nicht Teil unseres Datenbankschemas, es wird nur zur Überprüfung des Formulars verwendet. Daher habe ich dem Modell ein Attribut dafür hinzugefügt, z. öffentliches $ captcha ;

Hier ist der Ansichtscode für das Formular. Wir müssen die Captcha-Bibliothek oben einfügen. 

So sieht die Captcha-Validierung in Aktion aus: 

Yii2 Validators Sample CAPTCHA validation error

Wenn Sie auf das Captcha klicken, generiert Yii ein neues Bild. 

Der Compare-Validator

Nun geht es weiter zum CompareValidator. Dieser Prüfer vergleicht zwei Werte aus dem Formular oder einen einzelnen Formularwert mit einer Konstante, z. B. muss x kleiner als 99 sein. 

In diesem Beispiel möchte ich sicherstellen, dass die Benutzereingabe für den Rang größer als null ist, jedoch kleiner oder gleich 100 ist.

Zuerst füge ich das Eingabefeld wieder für unser Rangattribut hinzu: 

Dann füge ich unserem Modell zwei Vergleichsregeln hinzu:

Eine vollständige Liste der verfügbaren Vergleichsoperatoren finden Sie hier

So sieht unser Formular aus, wenn der Benutzer ein ungültiges Attribut übermittelt:

Yii2 Validators Compare

Wenn Sie die spezifischen Integritätsregeln in einer Fehlermeldung angeben möchten, können Sie mit Yii Validators den für den Benutzer angezeigten Fehler wie folgt anpassen:

Yii2 Validators The Compare validator with custom error message

Yii2-Validatoren Die Validatorin mit benutzerdefinierten Fehlernachricht vergleichen Dies zu implementieren ist mit dem Message-Attribut recht einfach:

Aktualisieren unseres Schemas, um weitere Validierungen zu testen

Für einige dieser nächsten Validierungstests bitte ich Sie, der Datenbank einige Felder hinzuzufügen. 

In \migrations\m150219_235923_create_sample_table.php fügen wir einige neue Felder hinzu, um die nächsten Validatoren zu testen: E-Mail, URL, Dateiname usw.

Führen Sie dann die Migration aus, um die Tabelle zu löschen, und führen Sie dann eine Aufwärtsbewegung durch: 

Wir können jetzt die E-Mail- und URL-Validatoren testen.

E-Mail- und URL-Validatoren 

Der EmailValidator stellt sicher, dass ein Wert eine gültige E-Mail-Adresse ist, und der UrlValidator stellt sicher, dass ein Wert im URL-Format vorliegt, z. http://ihredomain.com.

Es ist ziemlich einfach, Regeln für unsere neuen E-Mail- und URL-Felder zu erstellen: 

Hier ist der Ansichtscode für das Formular. Beachten Sie, wie ich benutzerdefinierte Etiketten zur Verbesserung der Formularverwendbarkeit verwende: 

Hier sind die Validatoren in Aktion: 

Yii2 Validators The Email and URL Validators

Dies ist offensichtlich sehr nützlich für Webanwendungen.

Der Exist Validator

Der ExistValidator ist in bestimmten Szenarien sehr nützlich. Es kann sicherstellen, dass ein Wert in einer anderen Tabelle vorhanden ist. Und es kann auf verschiedene Arten verwendet werden - hier einige Beispiele in der Dokumentation: 

In der Yii-Dokumentation wird hervorgehoben, dass mit Exist "überprüft werden kann, ob ein Fremdschlüssel einen Wert enthält, der in der Fremdtabelle gefunden werden kann". 

In unserem Beispiel werde ich eine Regel erstellen, die überprüft, ob die E-Mail-Adresse im Formular bereits in unserer registrierten Benutzertabelle vorhanden ist. Dazu verwenden wir die targetClass, die Yii mitteilt, in welcher Klasse (oder Modelltabelle) die E-Mail-Adresse des Benutzers zur Überprüfung nachgeschlagen wird. 

Hier ist die Regeldefinition. Beachten Sie die Einbeziehung unseres Benutzermodells oben: 

Dies weist Yii an, die User-Tabelle abzufragen, um sicherzustellen, dass die angegebene E-Mail-Adresse mit einem zuvor registrierten Benutzer übereinstimmt. 

So sieht es in Aktion aus: 

Yii2 Validators Exist with Email Lookup

Yii2-Validatoren sind mit E-Mail-Suche vorhanden Sie können hier mehr über die Exist-Validierung und ihre Permutationen erfahren.

Die Datei- und Bildprüfer 

Als Nächstes zeige ich Ihnen Beispiele für FileValidator, der die Existenz, den MIME-Typ und die Größe einer hochgeladenen Datei sicherstellt, sowie den ImageValidator, der das Bild und seine Eigenschaften überprüft. 

Um die Datei- und Image-Validatoren zu erkunden, lassen Sie uns ein Beispiel aus der Reihe "Erstellen Sie Ihr Startup mit PHP" betrachten: Benutzereinstellungen, Profilbilder und Kontaktdetails. In dieser Episode im UserSettings-Modell können Benutzer eine Datei für ihr Profilbild hochladen.

Das Bildattribut akzeptiert die hochgeladene Datei: 

Die FileValidatoren stellen sicher, dass das Image in einer richtigen Image-Erweiterung endet und weniger als 100.000 Byte umfasst. 

Der ImageValidator überprüft außerdem den Erweiterungstyp sowie die Breiten- und Höhenbereiche für das Bild. 

Hier ein Beispiel für Fehler, die durch das Hochladen eines Bildes erzeugt werden, dessen Abmessungen größer als 400 x 400 Pixel sind: 

Yii2 Validators Image and File Validation

Yii2-Validatoren Image- und Dateivalidierung Das ist mein Assistent oben, der meine Tutorials gerne kopiert hat.

Der Bereich im Validator 

Es gibt auch den RangeValidator, der sicherstellt, dass sich ein Wert innerhalb einer Liste zulässiger Einträge befindet. 

In unserem Beispiel fügen wir das Feld für die Zensur wieder in das Formular ein: 

Dann fügen wir einen RangeValidator hinzu, um die Antwort mit einer Ja- oder Nein-Zeichenfolge abzugleichen:

Hier ist ein Beispiel für den RangeValidator in Aktion: 

Yii2 Validators Range In Validator

Yii2-Gültigkeitsbereich im Gültigkeitsbereich

 Als Nächstes betrachten wir den RegulrExpressionValidator, der die Validierung anhand einer durch einen regulären Ausdruck definierten Bedingung durchführt. 

In unserem Beispiel verwende ich die folgende Regex, um vollständige Sätze mit alphabetischen Buchstaben abzugleichen. Das bedeutet, dass sie mit (!,? Oder.) 

Enden und keine numerischen Zeichen haben müssen. Hier ein Beispiel für eine Benutzereingabe, die den Test aufgrund der Anzahl und des fehlenden Interpunktionszeichens nicht bestanden hat:

Yii2 Validator Regular Expression Match Failure

Hier ist ein gültiger Satz: 

Yii2 Validator Regular Expression Match Success

Möglicherweise interessieren Sie sich auch für Acht reguläre Ausdrücke, die Sie kennen sollten (Tuts+), als Referenz für allgemeine Regex-Muster.

Der einzigartige Prüfer

Zum Schluss betrachten wir den UniqueValidator, der sicherstellt, dass ein Wert innerhalb einer Tabelle eindeutig ist, beispielsweise eine E-Mail-Adresse oder ein Slug.

Ich habe SluggableBehavior zuvor in dieser Serie durchgesehen und bietet eine eigene, einzigartige Unterstützung für Einzigartigkeit. Schauen wir uns aber noch ein paar weitere Beispiele aus der Reihe Building Your Startup With PHP an.

In der Codebase für Meeting Planner (aus den neueren Tutorial-Episoden) im Place-Modell (\frontend\models\Place.php) verwenden wir den eindeutigen Prüfer auf verschiedene Arten:

Erstens verwenden wir die eindeutige Regel mit dem Slug, um SluggableBehavior zu verbessern, was überflüssig ist. Sie können jedoch das Validierungsformat sehen.

Zweitens prüfen wir, ob die Ergebnisse des Google Places-Suchfelds für automatische Vervollständigung des Suchvorgangs dazu führen, dass das ausgeblendete Feld für google_place_id eindeutig ist, da es noch nicht in der Places-Tabelle vorhanden ist. Wir verhindern im Wesentlichen doppelte Google Place-IDs.

Das Besondere daran ist, dass wir mit dem einzigartigen Validator von Yii2 die Eindeutigkeit des sichtbaren Feldes (Suchfeld) erzwingen können, während er in der sekundären Spalte, die über AJAX von Google (google_place_id) zurückgegeben wird, validiert wird.

Drittens stellen wir sicher, dass name und full_address zusammen eindeutig sind. Mit anderen Worten, doppelte Ortsnamen sind in Ordnung. Es kann eine Bazillion Starbucks geben. Wir möchten jedoch nicht, dass jemand dieselbe Starbucks-Position zweimal betritt.

Hinweis: Starbucks-Kaffee ist kein wirksames Stimulans für Softwareentwickler. Ich ermutige Sie, sich in unabhängigen Kaffeehäusern aufzuhalten.

Hier ist ein Beispiel dafür in Aktion:

Yii2 Validators Unique

Was kommt als nächstes?

Ich hoffe, Sie stimmen zu, wie einfach und nützlich Yii2-Validatoren für die Webentwicklung sind. Ich kann mir einfach nicht vorstellen, ohne Hilfe eines Frameworks zur Vanilla PHP-Entwicklung zurückzukehren.

Achten Sie auf kommende Tutorials in meiner Programmierreihe "Programmieren mit Yii2", während ich mich weiter mit verschiedenen Aspekten des Frameworks beschäftige. In der nächsten Episode werde ich die erweiterten Validierungsfunktionen von Yii2 wie die folgenden überprüfen:

  • Bedingte Validierung zum Durchführen einer Validierungsregel nur, wenn ein bestimmtes Ereignis wahr ist
  • Benutzerdefinierte Validatoren zum Erstellen grundlegender Validierungen, die über das hinausgehen, was Yii standardmäßig bietet
  • Client-seitige Validierung, um die integrierte ActiveForm-JavaScript-Validierung von Yii zu verwenden, ohne dass eine Seitenaktualisierung erforderlich ist
  • AJAX-Validierung zum Implementieren serverseitiger AJAX-Validierungen zur Erweiterung der clientseitigen JavaScript-Validierungsfunktionen von Yii.
  • Validierungsereignisse zum Überschreiben der Validierung oder Ausführen bestimmter Funktionen vor und / oder nach der Validierung
  • Definieren von Szenarien zum selektiven Anwenden von Regeln für bestimmte Situationen
  • Ad-hoc-Validierung, um Validierungsregeln unabhängig von der Formularübermittlung zu verwenden

Ich freue mich über Feature- und Themenanfragen. Sie können sie in den Kommentaren unten posten, mich auf Twitter über @reifman erreichen oder mich bei Lookahead Consulting per E-Mail benachrichtigen.

Wenn Sie wissen möchten, wann das nächste Yii2-Tutorial ankommt, können Sie auch meine Tuts+ Instructor-Seite besuchen. Es enthält immer Links zu meinen Artikeln unmittelbar nach deren Veröffentlichung.

ähnliche Links

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.