Menu
Coddy logo textTech

Zusammenfassung - Formular-Validator

Teil des Abschnitts Objektorientierte Programmierung der PHP-Journey von Coddy — Lektion 69 von 91.

challenge icon

Aufgabe

Einfach

Lassen 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 Basisklasse ValidationException, die Exception erweitert. Diese dient als Elternklasse für alle validierungsbezogenen Exceptions.
  • Exceptions.php — Binden Sie die Datei ValidationException ein und erstellen Sie drei spezifische Exception-Klassen, die ValidationException erweitern:
    • RequiredFieldException — Akzeptiert einen Feldnamen in ihrem Konstruktor und übergibt die Nachricht "[fieldName] is required" an die Elternklasse
    • InvalidEmailException — Akzeptiert einen E-Mail-String in ihrem Konstruktor und übergibt die Nachricht "'[email]' is not a valid email" an die Elternklasse
    • MinLengthException — 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 Klasse FormValidator mit diesen Validierungsmethoden:
    • validateRequired(?string $value, string $fieldName): string — Wirft eine RequiredFieldException, wenn der Wert null oder leer ist (nach dem Trimmen), andernfalls wird der getrimmte Wert zurückgegeben
    • validateEmail(string $email): string — Wirft eine InvalidEmailException, wenn die E-Mail ungültig ist (verwenden Sie filter_var mit FILTER_VALIDATE_EMAIL), andernfalls wird die E-Mail zurückgegeben
    • validateMinLength(string $value, string $fieldName, int $minLength): string — Wirft eine MinLengthException, 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 FormValidator und 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 ValidationException abfangen, 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