Rückblick – Formularvalidator
Teil des Abschnitts Objektorientierte Programmierung der PHP-Journey von Coddy. Lektion 69 von 91.
Aufgabe
EinfachLass uns einen Validator für ein Benutzerregistrierungsformular erstellen, der Validierungsfehler sammelt und alle auf einmal meldet, anstatt beim ersten Problem abzubrechen. So funktioniert die Formularvalidierung in der Praxis: Benutzer möchten alle Probleme mit ihrer Eingabe sehen und nicht eines nach dem anderen beheben.
Du organisierst deinen Code über vier Dateien:
ValidationException.php: Erstelle eine BasisklasseValidationException, dieExceptionerweitert. Sie dient als übergeordnete Klasse für alle validierungsbezogenen Ausnahmen.Exceptions.php: Binde die Datei ValidationException ein und erstelle drei spezifische Ausnahmeklassen, dieValidationExceptionerweitern:RequiredFieldException: Akzeptiert einen Feldnamen in ihrem Konstruktor und übergibt die Nachricht"[fieldName] is required"an die übergeordnete KlasseInvalidEmailException: Akzeptiert eine E-Mail-Zeichenkette in ihrem Konstruktor und übergibt die Nachricht"'[email]' is not a valid email"an die übergeordnete KlasseMinLengthException: Akzeptiert einen Feldnamen und eine Mindestlänge (int) in ihrem Konstruktor und übergibt die Nachricht"[fieldName] must be at least [minLength] characters"an die übergeordnete Klasse
FormValidator.php: Binde die Exceptions-Datei ein und erstelle eine KlasseFormValidatormit diesen Validierungsmethoden:validateRequired(?string $value, string $fieldName): string: WirftRequiredFieldException, wenn der Wert null oder leer ist (nach dem Entfernen von Leerzeichen), andernfalls wird der bereinigte Wert zurückgegebenvalidateEmail(string $email): string: WirftInvalidEmailException, wenn die E-Mail ungültig ist (verwendefilter_varmitFILTER_VALIDATE_EMAIL), andernfalls wird die E-Mail zurückgegebenvalidateMinLength(string $value, string $fieldName, int $minLength): string: WirftMinLengthException, wenn die Zeichenkettenlänge kleiner als das Minimum ist, andernfalls wird der Wert zurückgegeben
main.php: Binde die FormValidator-Datei ein. Du erhältst drei Eingaben: einen Benutzernamen, eine E-Mail-Adresse und ein Passwort.Erstelle einen
FormValidatorund ein leeres Array, um Fehlermeldungen zu sammeln. Validiere jedes Feld in einem separaten try-catch-Block:- Validiere den Benutzernamen als Pflichtfeld
- Validiere die E-Mail-Adresse zuerst als Pflichtfeld und anschließend als gültiges E-Mail-Format
- Validiere das Passwort zuerst als Pflichtfeld und anschließend darauf, dass es eine Mindestlänge von 8 Zeichen hat
Wenn du eine
ValidationExceptionabfängst, füge ihre Nachricht zu deinem Fehler-Array hinzu, anstatt die Ausführung zu stoppen.Wenn alle Validierungen abgeschlossen sind und Fehler vorhanden sind, gib jede Fehlermeldung in einer eigenen Zeile aus. Wenn keine Fehler vorhanden sind, gib
"Registration successful"aus.
Dieses Muster, alle Fehler vor ihrer Meldung zu sammeln, ist entscheidend für eine gute Benutzererfahrung. Deine Ausnahmehierarchie macht es einfach, alle Validierungsprobleme mit einem einzigen catch-Block abzufangen und gleichzeitig spezifische Ausnahmetypen für verschiedene Validierungsfehler bereitzustellen.
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: Benutzername als erforderlich in einem try-catch-Block validieren
// ValidationException abfangen und ihre Nachricht zum $errors-Array hinzufügen
// TODO: E-Mail zuerst als erforderlich validieren, dann als gültiges E-Mail-Format validieren
// Einen try-catch-Block verwenden und alle Fehlermeldungen zum $errors-Array hinzufügen
// TODO: Passwort zuerst als erforderlich validieren, dann die Mindestlänge von 8 Zeichen validieren
// Einen try-catch-Block verwenden und alle Fehlermeldungen zum $errors-Array hinzufügen
// TODO: Nach allen Validierungen:
// - Wenn es Fehler gibt, jede Fehlermeldung in einer eigenen Zeile ausgeben
// - If there are no errors, print "Registration successful"
?>Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienEinführung in OOPKlassen vs. ObjekteDas Schlüsselwort $thisMethodenEigenschaftenKonstruktor (__construct)Destruktor (__destruct)Rückblick – Einfacher Taschenrechner4Vererbung
Grundlegende VererbungDas Schlüsselwort parent::MethodenüberschreibungDas Schlüsselwort finalAbstrakte KlassenRückblick – Mitarbeiterhierarchie7Kapselung
Öffentlich, geschützt, privatZugriffsmodifikatoren im DetailGetter und SetterInformationsverbergungKonstruktor-Promotion (8.0)Wiederholung – System zur Verwaltung von Schülerdatensätzen2Namespaces & Autoloading
Einführung in NamespacesDas use-SchlüsselwortPSR-4-Autoloading-StandardComposer-AutoloaderRückblick – Organisiertes Projekt5Schnittstellen & Verträge
Einführung in SchnittstellenSchnittstellen implementierenMehrere Schnittstellen implementierenSchnittstelle vs. abstrakte KlasseTyp-Hinweise mit SchnittstellenRückblick – Formrechner8Magische Methoden
Einführung in magische Methoden__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Objektklonen__serialize & __unserializeRückblick – Benutzerdefinierte Sammlung11Typsystem & Fehlerbehandlung
TypdeklarationenNullable-TypenUnion- & Intersection-TypenException-KlassenBenutzerdefinierte Exception-HierarchieTry, Catch, FinallyRückblick – Formularvalidator14Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen3Klassen-Eigenschaften
Instanz- vs. statische EigenschaftenKonstanten in KlassenStatische Methoden & EigenschaftenPrivate & geschützte EigenschaftenSchreibgeschützte Eigenschaften (PHP 8.1)Zusammenfassung – Bankkonto-Manager6Polymorphie
Methodenüberschreibung erneut betrachtetPolymorphie über SchnittstellenTyp-Hinweise & Union-TypenSpätes statisches BindenRückblick – Zahlungsabwickler9Traits
Einführung in TraitsMehrere Traits verwendenAuflösung von Trait-KonfliktenAbstrakte Methoden in TraitsTraits vs. Vererbung12Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterObserver-MusterStrategy-Muster15Abschließende Herausforderungen
E-Learning-PlattformBankingsystemEntwicklung einer SpielfigurFahrzeugvermietungÜbe selbstständig: Online-PHP-Compiler