Reťazenie validátorov
Často je potrebné aplikovať viac typov validácie na hodnotu v istom poradí.
Nasledujúca ukážka objasní princíp ako to urobiť na príklade z
úvodu, kde bolo požadované,
že meno používateľa musí mať 6 až 12 alfanumerických znakov:
addValidator(new Zend_Validate_StringLength(6, 12))
->addValidator(new Zend_Validate_Alnum());
// Validácia username
if ($validatorChain->isValid($username)) {
// username zodpovedá požiadavke
} else {
// username nezodpovedá požiadavke; zobrazenie chýb
foreach ($validatorChain->getMessages() as $message) {
echo "$message\n";
}
}
?>]]>
Validátory sú aplikované podľa podľa poradia v ktorom boli pridané do
Zend_Validate. V uvedenom príklade je najprv skontrolovaná dĺžka,
či je medzi 6 - 12, potom či obsahuje iba alfanumerické znaky. Druhá validácia
je urobená vždy, nezávisle na výsledku prvej. Ak obidve validácie zlyhajú,
potom getMessages() vráti chybové správy z obidvoch validátorov.
V niektorých prípadoch je zmysluplné prerušiť validáciu ak validácia bola neúspešná.
Zend_Validate umožňuje takéto správanie pomocou druhého parametra
metódy addValidator(). Nastavením $breakChainOnFailure
na true sa preruší validácia v prípade neúspešnej validácie a nebudú
vykonané všetky ostatné validácie, ktoré sú zbytočné, alebo nevhodné v danej
situácii. Ak náš príklad upravíme nasledovne, potom alfanumerická validácia
neprebehne ak bude neúspešná validácia na dĺžku reťazca:
addValidator(new Zend_Validate_StringLength(6, 12), true)
->addValidator(new Zend_Validate_Alnum());
?>]]>
Každý objekt ktorý implementuje Zend_Validate_Interface môže byť
použitý v zreťazení validátorov.