Menu
Coddy logo textTech

Rückblick – Formularvalidator

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

challenge icon

Aufgabe

Einfach

Lass 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 Basisklasse ValidationException, die Exception erweitert. Sie dient als übergeordnete Klasse für alle validierungsbezogenen Ausnahmen.
  • Exceptions.php: Binde die Datei ValidationException ein und erstelle drei spezifische Ausnahmeklassen, die ValidationException erweitern:
    • RequiredFieldException: Akzeptiert einen Feldnamen in ihrem Konstruktor und übergibt die Nachricht "[fieldName] is required" an die übergeordnete Klasse
    • InvalidEmailException: Akzeptiert eine E-Mail-Zeichenkette in ihrem Konstruktor und übergibt die Nachricht "'[email]' is not a valid email" an die übergeordnete Klasse
    • 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 übergeordnete Klasse
  • FormValidator.php: Binde die Exceptions-Datei ein und erstelle eine Klasse FormValidator mit diesen Validierungsmethoden:
    • validateRequired(?string $value, string $fieldName): string: Wirft RequiredFieldException, wenn der Wert null oder leer ist (nach dem Entfernen von Leerzeichen), andernfalls wird der bereinigte Wert zurückgegeben
    • validateEmail(string $email): string: Wirft InvalidEmailException, wenn die E-Mail ungültig ist (verwende filter_var mit FILTER_VALIDATE_EMAIL), andernfalls wird die E-Mail zurückgegeben
    • validateMinLength(string $value, string $fieldName, int $minLength): string: Wirft MinLengthException, 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 FormValidator und 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 ValidationException abfä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

Übe selbstständig: Online-PHP-Compiler