paolo@bimodesign.com | +34 608 61 64 10

Framework

        

Zend - addValidator (esempio base)

Di seguito vi illustro come poter aggiungere la validazione dei campi di una form, usando le classi predefinite, mentre in un altro articolo vi illustro come crearne dei proprio. Innanzitutto e' necessario sapere come va creata una form, per la cui spiegazione vi rimando a questo eccellente tutorial http://zendguru.wordpress.com/2009/03/04/zend-framework-creating-custom-zend-form/.
Ora, vediamo come aggiungere ad un elemento di un form, che chiameremo semplicemente formElement,uno o piu' controlli tra quelli predefiniti, che sono i seguenti

Alnum / Alpha / Barcode / Between / Ccnum / Date / Digits
EmailAddress / Float / GreaterThan / Hex / Hostname / InArray
Int / Ip / LessThan / NotEmpty / Regex / StringLength

Che sono gli short name dei metodi Zend_Validate_*.

Un solo controllo:
Per aggiungere un solo controllo, ad esempio alfanumericola sintassi e' la seguente

$formElement->addValidator('Alnum');

Ovvero si richiama il metodo addValidator passando lo short name necessario.

Piu' controlli:
Per aggiungere piu' controlli, occorre richiamare addValidators passando un array di array, ad esempio nel seguente modo

$formElement->addValidators(array(
                            array('NotEmpty', true),
                            array('Alpha',false),
                            array('stringLength', false, array(6, 20)),

dove ho specificato che il campo non puo' essere vuoto, deve essere alfabetico e deve essere lungo tra 6 e 20 caratteri.
Come potete notare ho inserito per alcuni controlli il secondo valore booleano TRUE/FALSE, che di default e' settato a null nel relativo metodo addValidator e che e' chiamato breakChainOnFailure.
Cosa serve?
A visualizzare o meno tutti gli errori relativi a quel campo di input. Ovvero, se il controllo precedente e' settato a TRUE allora il successivo errore non verra' visualizzato, nel caso questo sia attivato. Altrimenti se settato a FALSE verranno visualizzati entrambi.
Riporto un esempio banale, ma che spiega piu' di mille parole :)

Caso 1

$formElement->addValidators(array(
                            array('NotEmpty', true),
                            array('Alpha',false),
                            array('stringLength', false, array(6, 20)),

Se inserisco il valore 1111 numerico, visualizzero' due messaggi
'1111' contiene caratteri non alfabetici
'1111' ha meno di 6 caratteri

Caso 2

$formElement->addValidators(array(
                            array('NotEmpty', true),
                            array('Alpha',true),
                            array('stringLength', false, array(6, 20)),

Comparira' un solo messaggio: '1111' contiene caratteri non alfabetici

Nota:E' stato riscontrato un bug per la validazione dell'indirizzo di email, che spieghero' in un prossimo articolo.