Podsumowanie — walidator formularzy
Część sekcji Programowanie obiektowe ścieżki PHP w Coddy. Lekcja 69 z 91.
Wyzwanie
ŁatwyZbudujmy walidator formularza rejestracji użytkownika, który zbiera błędy walidacji i zgłasza je wszystkie naraz, zamiast zatrzymywać się na pierwszym problemie. Tak działa walidacja formularzy w praktyce: użytkownicy chcą zobaczyć wszystkie problemy związane z przesłanymi danymi, a nie poprawiać je po kolei.
Rozmieścisz swój kod w czterech plikach:
ValidationException.php: Utwórz bazową klasęValidationException, która rozszerzaException. Będzie ona klasą nadrzędną dla wszystkich wyjątków związanych z walidacją.Exceptions.php: Dołącz plik ValidationException i utwórz trzy konkretne klasy wyjątków rozszerzająceValidationException:RequiredFieldException: Przyjmuje nazwę pola w konstruktorze i przekazuje klasie nadrzędnej komunikat"[fieldName] is required"InvalidEmailException: Przyjmuje ciąg znaków z adresem e-mail w konstruktorze i przekazuje klasie nadrzędnej komunikat"'[email]' is not a valid email"MinLengthException: Przyjmuje nazwę pola i minimalną długość (int) w konstruktorze i przekazuje klasie nadrzędnej komunikat"[fieldName] must be at least [minLength] characters"
FormValidator.php: Dołącz plik Exceptions i utwórz klasęFormValidatorz następującymi metodami walidacji:validateRequired(?string $value, string $fieldName): string: ZgłaszaRequiredFieldException, jeśli wartość ma wartość null lub jest pusta (po usunięciu białych znaków), a w przeciwnym razie zwraca wartość po usunięciu białych znakówvalidateEmail(string $email): string: ZgłaszaInvalidEmailException, jeśli adres e-mail jest nieprawidłowy (użyjfilter_varzFILTER_VALIDATE_EMAIL), a w przeciwnym razie zwraca adres e-mailvalidateMinLength(string $value, string $fieldName, int $minLength): string: ZgłaszaMinLengthException, jeśli długość ciągu znaków jest mniejsza niż minimum, a w przeciwnym razie zwraca wartość
main.php: Dołącz plik FormValidator. Otrzymasz trzy dane wejściowe: nazwę użytkownika, adres e-mail i hasło.Utwórz obiekt
FormValidatororaz pustą tablicę do zbierania komunikatów o błędach. Waliduj każde pole w osobnym bloku try-catch:- Sprawdź, czy nazwa użytkownika jest wymagana
- Najpierw sprawdź, czy adres e-mail jest wymagany, a następnie sprawdź, czy ma prawidłowy format adresu e-mail
- Najpierw sprawdź, czy hasło jest wymagane, a następnie sprawdź, czy ma co najmniej 8 znaków
Przechwytując wyjątek
ValidationException, dodaj jego komunikat do tablicy błędów zamiast zatrzymywać wykonywanie programu.Po wszystkich walidacjach, jeśli wystąpiły błędy, wypisz każdy komunikat o błędzie w osobnym wierszu. Jeśli nie ma błędów, wypisz
"Registration successful".
Ten sposób zbierania wszystkich błędów przed ich zgłoszeniem jest niezbędny dla zapewnienia dobrego doświadczenia użytkownika. Hierarchia wyjątków ułatwia przechwycenie wszystkich problemów z walidacją w jednym bloku catch, a jednocześnie pozwala zachować osobne typy wyjątków dla różnych błędów walidacji.
Spróbuj swoich sił
<?php
require_once 'FormValidator.php';
// Odczytaj dane wejściowe
$username = trim(fgets(STDIN));
$email = trim(fgets(STDIN));
$password = trim(fgets(STDIN));
// Utwórz instancję FormValidator
$validator = new FormValidator();
// Utwórz pustą tablicę do zbierania komunikatów o błędach
$errors = [];
// TODO: Sprawdź w bloku try-catch, czy username zostało podane
// Przechwyć ValidationException i dodaj jego komunikat do tablicy $errors
// TODO: Najpierw sprawdź, czy email został podany, a następnie czy ma poprawny format adresu e-mail
// Użyj bloku try-catch i dodaj wszystkie komunikaty o błędach do tablicy $errors
// TODO: Najpierw sprawdź, czy password zostało podane, a następnie czy ma co najmniej 8 znaków
// Użyj bloku try-catch i dodaj wszystkie komunikaty o błędach do tablicy $errors
// TODO: Po zakończeniu wszystkich walidacji:
// - Jeśli występują błędy, wypisz każdy komunikat o błędzie w osobnym wierszu
// - Jeśli nie ma błędów, wypisz "Registration successful"
?>Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrzneWprowadzenie do programowania obiektowegoKlasy a obiektySłowo kluczowe $thisMetodyWłaściwościKonstruktor (__construct)Destruktor (__destruct)Powtórka — prosty kalkulator4Dziedziczenie
Podstawy dziedziczeniaSłowo kluczowe parent::Przesłanianie metodSłowo kluczowe finalKlasy abstrakcyjnePowtórzenie – hierarchia pracowników7Enkapsulacja
Public, protected, privateModyfikatory dostępu w szczegółachGettery i setteryUkrywanie informacjiPromocja parametrów konstruktora (8.0)Podsumowanie — system ewidencji studentów2Przestrzenie nazw i autoloading
Wprowadzenie do przestrzeni nazwSłowo kluczowe useStandard autoloadingu PSR-4Autoloader ComposeraPodsumowanie – uporządkowany projekt5Interfejsy i kontrakty
Wprowadzenie do interfejsówImplementowanie interfejsówImplementowanie wielu interfejsówInterfejs a klasa abstrakcyjnaPodpowiadanie typów za pomocą interfejsówPodsumowanie — kalkulator kształtów8Metody magiczne
Wprowadzenie do metod magicznych__toString i __debugInfo__get, __set, __isset, __unset__call i __callStatic__clone i klonowanie obiektów__serialize i __unserializePodsumowanie — własna kolekcja11System typów i obsługa błędów
Deklaracje typówTypy nullableTypy sumy i przecięciaKlasy wyjątkówNiestandardowa hierarchia wyjątkówTry, Catch, FinallyPodsumowanie — walidator formularzy14Projekt: Zarządzanie biblioteką
Przegląd projektuKlasy książki i użytkownika3Właściwości klas
Właściwości instancji a właściwości statyczneStałe w klasachMetody i właściwości statyczneWłaściwości prywatne i chronioneWłaściwości tylko do odczytu (PHP 8.1)Podsumowanie — menedżer kont bankowych6Polimorfizm
Ponowne omówienie nadpisywania metodPolimorfizm za pomocą interfejsówPodpowiedzi typów i typy sumyPóźne wiązanie statycznePodsumowanie — procesor płatności9Cechy
Wprowadzenie do cechKorzystanie z wielu cechRozwiązywanie konfliktów cechMetody abstrakcyjne w cechachCechy a dziedziczenie12Wzorce projektowe, część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec ObserverWzorzec StrategyPoćwicz samodzielnie: Kompilator PHP online