La validazione e il filtraggio dell'input sono due funzionalità indispensabili da implementare con molta attenzione nelle web application: in questo contesto mettiamo in gioco gran parte della sicurezza dei nostri applicativi.
Come abbiamo visto nella parte introduttiva di questa lezione Zend_Filter e Zend_Validation, anche se indipendenti, sono stati integrati in Zend_Form, proprio per facilitare la gestione di questi meccanismi.
Nel codice in cui abbiamo creato il form abbiamo esteso i campi "nome utente" e "password" per includere il filtraggio e la validazione attraverso le interfacce addFilter()
e addValidator()
rispettivamente:
[...]
//Impostiamo i filtri e i validatori per il campo "username"
$nomeutente->setRequired(TRUE)
->addFilter('StringTrim')
->addValidator('alnum');
//Impostiamo un messaggio di errore "customizzato"
$"nomeutente->getValidator('alnum')->setMessage('Il nome utente può contenere solo lettere e numeri');
[…]
//Impostiamo i filtri e i validatori per il campo "password"
$password->setRequired(TRUE)
->addFilter('StringTrim')
->addValidator('stringLength', true, array(8));
//"Customizziamo" il messaggio
$password->getValidator('stringLength')->setMessage('La password deve contenere 8 caratteri');
[...]
Innanzitutto rendiamo obbligatori entrambi i campi attivando la direttiva setRequired
: infatti per effettuare il login gli utenti devono necessariamente inviare sia un nome utente che una password validi.
A questo punto impostiamo i filtri: in entrambi i casi impostiamo il quello che elimina gli spazi nelle stringhe di testo (StringTrim
), ma ZF fornisce tutta una serie di filtri già implementati che possiamo utilizzare a seconda delle necessità, come ad esempio Anum, Alpha, Digits, ecc. che restituiscono una stringa eliminando rispettivamente tutti i caratteri tranne quelli alfanumerici, quelli alfabetici e le cifre.
Attraverso il metodo addValidator()
invece impostiamo i validatori: per il campo username abbiamo impostato un validatore che permette l'inserimento solo di caratteri alfanumerici, mentre per il campo password abbiamo impostato un validatore che non accetta stringhe inferiori agli 8 caratteri. Per finire, in entrambi i casi grazie al metodo setMessage()
abbiamo personalizzato il messaggio di feedback che riceve l'utente nel caso in cui il rispettivo validatore riscontri dei valori non accettabili.
ZF ci fornisce la possibilità di scrivere filtri e validatori in base alle specifiche necessità dei nostri form nel caso in cui quelli di default non sia sufficienti.