Menu
Coddy logo textTech

Riepilogo - Validatore di moduli

Fa parte della sezione Programmazione orientata agli oggetti del percorso PHP di Coddy. Lezione 69 di 91.

challenge icon

Sfida

Facile

Creiamo un validatore per un modulo di registrazione degli utenti che raccolga gli errori di validazione e li segnali tutti insieme, invece di fermarsi al primo problema. È così che funziona la validazione dei moduli nel mondo reale: gli utenti vogliono vedere tutti i problemi relativi ai dati inviati, non correggerli uno alla volta.

Organizzerai il codice in quattro file:

  • ValidationException.php: crea una classe base ValidationException che estende Exception. Questa funge da classe genitore per tutte le eccezioni relative alla validazione.
  • Exceptions.php: includi il file ValidationException e crea tre classi di eccezione specifiche che estendono ValidationException:
    • RequiredFieldException: accetta il nome di un campo nel costruttore e passa alla classe genitore il messaggio "[fieldName] is required"
    • InvalidEmailException: accetta una stringa email nel costruttore e passa alla classe genitore il messaggio "'[email]' is not a valid email"
    • MinLengthException: accetta nel costruttore il nome di un campo e una lunghezza minima (int) e passa alla classe genitore il messaggio "[fieldName] must be at least [minLength] characters"
  • FormValidator.php: includi il file Exceptions e crea una classe FormValidator con questi metodi di validazione:
    • validateRequired(?string $value, string $fieldName): string: genera RequiredFieldException se il valore è null o vuoto (dopo averlo ripulito dagli spazi iniziali e finali); altrimenti restituisce il valore ripulito
    • validateEmail(string $email): string: genera InvalidEmailException se l'email non è valida (usa filter_var con FILTER_VALIDATE_EMAIL); altrimenti restituisce l'email
    • validateMinLength(string $value, string $fieldName, int $minLength): string: genera MinLengthException se la lunghezza della stringa è inferiore al minimo; altrimenti restituisce il valore
  • main.php: includi il file FormValidator. Riceverai tre input: un nome utente, un'email e una password.

    Crea un FormValidator e un array vuoto per raccogliere i messaggi di errore. Convalida ogni campo in un blocco try-catch separato:

    • Convalida che il nome utente sia obbligatorio
    • Convalida prima che l'email sia obbligatoria, poi che abbia un formato email valido
    • Convalida prima che la password sia obbligatoria, poi che abbia una lunghezza minima di 8 caratteri

    Quando intercetti una ValidationException, aggiungi il suo messaggio all'array degli errori invece di interrompere l'esecuzione.

    Dopo tutte le convalide, se ci sono errori, stampa ogni messaggio di errore su una riga separata. Se non ci sono errori, stampa "Registration successful".

Questo schema, che consiste nel raccogliere tutti gli errori prima di segnalarli, è essenziale per offrire una buona esperienza utente. La gerarchia delle eccezioni semplifica l'intercettazione di tutti i problemi di validazione con un singolo blocco catch, mantenendo al contempo tipi di eccezione specifici per i diversi errori di validazione.

Provalo tu

<?php
require_once 'FormValidator.php';

// Leggi gli input
$username = trim(fgets(STDIN));
$email = trim(fgets(STDIN));
$password = trim(fgets(STDIN));

// Crea un'istanza di FormValidator
$validator = new FormValidator();

// Crea un array vuoto per raccogliere i messaggi di errore
$errors = [];

// TODO: Verifica che username sia presente in un blocco try-catch
// Intercetta ValidationException e aggiungi il suo messaggio all'array $errors

// TODO: Verifica prima che email sia presente, poi che abbia un formato email valido
// Usa un blocco try-catch e aggiungi eventuali messaggi di errore all'array $errors

// TODO: Verifica prima che password sia presente, poi che abbia una lunghezza minima di 8 caratteri
// Usa un blocco try-catch e aggiungi eventuali messaggi di errore all'array $errors

// TODO: Dopo tutte le verifiche:
// - Se ci sono errori, stampa ogni messaggio di errore su una riga separata
// - Se non ci sono errori, stampa "Registration successful"

?>

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore PHP online