Zusammenfassung - Formular-Validator
Teil des Abschnitts Objektorientierte Programmierung der PHP-Journey von Coddy — Lektion 69 von 91.
Aufgabe
EinfachLassen Sie uns einen Validator für ein Benutzerregistrierungsformular erstellen, der Validierungsfehler sammelt und alle auf einmal meldet, anstatt beim ersten Problem anzuhalten. So funktioniert die Formularvalidierung in der Praxis — Benutzer möchten alle Probleme mit ihrer Übermittlung sehen und sie nicht nacheinander beheben müssen.
Sie werden Ihren Code über vier Dateien organisieren:
ValidationException.php— Erstellen Sie eine BasisklasseValidationException, dieExceptionerweitert. Diese dient als Elternklasse für alle validierungsbezogenen Exceptions.Exceptions.php— Binden Sie die Datei ValidationException ein und erstellen Sie drei spezifische Exception-Klassen, dieValidationExceptionerweitern:RequiredFieldException— Akzeptiert einen Feldnamen in ihrem Konstruktor und übergibt die Nachricht"[fieldName] is required"an die ElternklasseInvalidEmailException— Akzeptiert einen E-Mail-String in ihrem Konstruktor und übergibt die Nachricht"'[email]' is not a valid email"an die ElternklasseMinLengthException— Akzeptiert einen Feldnamen und eine Mindestlänge (int) in ihrem Konstruktor und übergibt die Nachricht"[fieldName] must be at least [minLength] characters"an die Elternklasse
FormValidator.php— Binden Sie die Datei Exceptions ein und erstellen Sie eine KlasseFormValidatormit diesen Validierungsmethoden:validateRequired(?string $value, string $fieldName): string— Wirft eineRequiredFieldException, wenn der Wert null oder leer ist (nach dem Trimmen), andernfalls wird der getrimmte Wert zurückgegebenvalidateEmail(string $email): string— Wirft eineInvalidEmailException, wenn die E-Mail ungültig ist (verwenden Siefilter_varmitFILTER_VALIDATE_EMAIL), andernfalls wird die E-Mail zurückgegebenvalidateMinLength(string $value, string $fieldName, int $minLength): string— Wirft eineMinLengthException, wenn die Stringlänge kürzer als das Minimum ist, andernfalls wird der Wert zurückgegeben
main.php— Binden Sie die Datei FormValidator ein. Sie erhalten drei Eingaben: einen Benutzernamen, eine E-Mail und ein Passwort.Erstellen Sie einen
FormValidatorund ein leeres Array, um Fehlermeldungen zu sammeln. Validieren Sie jedes Feld in einem separaten try-catch-Block:- Validieren Sie den Benutzernamen als erforderlich (required)
- Validieren Sie die E-Mail zuerst als erforderlich, dann validieren Sie sie auf ein gültiges E-Mail-Format
- Validieren Sie das Passwort zuerst als erforderlich, dann validieren Sie, ob es eine Mindestlänge von 8 Zeichen hat
Wenn Sie eine
ValidationExceptionabfangen, fügen Sie deren Nachricht Ihrem Fehler-Array hinzu, anstatt die Ausführung zu stoppen.Nach allen Validierungen geben Sie, falls Fehler vorhanden sind, jede Fehlermeldung in einer eigenen Zeile aus. Wenn keine Fehler vorhanden sind, geben Sie
"Registration successful"aus.
Dieses Muster, alle Fehler zu sammeln, bevor sie gemeldet werden, ist entscheidend für eine gute Benutzererfahrung. Ihre Exception-Hierarchie macht es einfach, alle Validierungsprobleme mit einem einzigen Catch-Block abzufangen, während Sie dennoch spezifische Exception-Typen für verschiedene Validierungsfehler haben.
Probier es selbst
<?php
require_once 'FormValidator.php';
// Eingaben lesen
$username = trim(fgets(STDIN));
$email = trim(fgets(STDIN));
$password = trim(fgets(STDIN));
// Eine FormValidator-Instanz erstellen
$validator = new FormValidator();
// Ein leeres Array erstellen, um Fehlermeldungen zu sammeln
$errors = [];
// TODO: Benutzernamen als erforderlich in einem try-catch-Block validieren
// ValidationException abfangen und deren Nachricht zum $errors-Array hinzufügen
// TODO: E-Mail zuerst als erforderlich validieren, dann auf ein gültiges E-Mail-Format prüfen
// Einen try-catch-Block verwenden und alle Fehlermeldungen zum $errors-Array hinzufügen
// TODO: Passwort zuerst als erforderlich validieren, dann auf eine Mindestlänge von 8 Zeichen prüfen
// Einen try-catch-Block verwenden und alle Fehlermeldungen zum $errors-Array hinzufügen
// TODO: Nach allen Validierungen:
// - Wenn Fehler vorhanden sind, jede Fehlermeldung in einer eigenen Zeile ausgeben
// - Wenn keine Fehler vorhanden sind, "Registration successful" ausgeben
?>Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienEinführung in die OOPKlassen vs. ObjekteDas $this-SchlüsselwortMethodenEigenschaftenKonstruktor (__construct)Destruktor (__destruct)Rückblick - Einfacher Taschenrechner4Vererbung
Grundlagen der VererbungDas parent:: SchlüsselwortMethoden überschreibenDas final SchlüsselwortAbstrakte KlassenZusammenfassung – Mitarbeiter-Hierarchie7Kapselung
Public, Protected, PrivateZugriffsmodifikatoren im DetailGetter und SetterInformation HidingConstructor Promotion (8.0)Zusammenfassung – Studentenverwaltungssystem2Namensräume & Autoloading
Einführung in NamensräumeDas use-SchlüsselwortPSR-4 Autoloading-StandardComposer AutoloaderZusammenfassung – Organisiertes Projekt5Interfaces & Verträge
Einführung in InterfacesInterfaces implementierenMehrfache Interface-ImplementierungInterface vs. Abstrakte KlasseType Hinting mit InterfacesZusammenfassung – Formen-Rechner8Magische Methoden
Einführung in magische Methoden__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Objekt-Klonen__serialize & __unserializeZusammenfassung - Eigene Collection11Typsystem & Fehlerbehandlung
TypdeklarationenNullable-TypenUnion- & Intersection-TypenException-KlassenEigene Exception-HierarchieTry, Catch, FinallyZusammenfassung - Formular-Validator14Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen3Klasseneigenschaften
Instanz- vs. statische EigenschaftenKonstanten in KlassenStatische Methoden & EigenschaftenPrivate & geschützte EigenschaftenReadonly-Eigenschaften (PHP 8.1)Zusammenfassung – Bankkonto-Manager6Polymorphismus
Method Overriding erneut betrachtetPolymorphismus über InterfacesType Hinting & Union TypesLate Static BindingZusammenfassung – Payment Processor9Traits
Einführung in TraitsVerwendung mehrerer TraitsKonfliktlösung bei TraitsAbstrakte Methoden in TraitsTraits vs. Vererbung12Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterObserver-MusterStrategy-Muster15Abschlussherausforderungen
E-Learning-PlattformBanksystemSpielcharakter-EntwicklungFahrzeugvermietung