1 <sect1 id="zend.validate.validator_chains">
3 <title>Łańcuchy weryfikatorów</title>
6 Często do pewnej wartości potrzebujemy zastosować wiele weryfikatorów w
7 określonej kolejności. Poniższy kod demonstruje sposób rozwiązania
9 <link linkend="zend.validate.introduction">wprowadzenia</link>, gdzie
10 nazwa użytkownika musi mieć długość między 6 a 12 alfanumerycznych
13 <programlisting role="php"><![CDATA[
14 // Tworzymy łańcuch weryfikatorów i dodajemy do niego weryfikatory
15 $validatorChain = new Zend_Validate();
16 $validatorChain->addValidator(new Zend_Validate_StringLength(6, 12))
17 ->addValidator(new Zend_Validate_Alnum());
19 // Sprawdzamy nazwę użytkownika
20 if ($validatorChain->isValid($username)) {
21 // nazwa użytkownika jest poprawna
23 // nazwa użytkownika nie jest poprawna; wyświetlamy komunikaty
24 foreach ($validatorChain->getMessages() as $message) {
31 Weryfikatory są uruchamiane w takiej kolejności, w jakiej zostały dodane
32 do <code>Zend_Validate</code>. W powyższym przykładzie, wpierw jest
33 sprawdzane jest to, czy długość nazwy użytkownika mieści się miedzy 6 a
34 12 znaków, a następnie sprawdzane jest czy zawiera ona tylko znaki
35 alfanumeryczne. Druga weryfikacja, dla alfanumerycznych znaków, jest
36 przeprowadzana niezależnie od tego, czy pierwsza weryfikacja, dla długości
37 pomiędzy 6 a 12 znaków udała się. Oznacza to, że jeśli nie udadzą się
38 obie weryfikacje, to metoda <code>getMessages()</code> zwróci wiadomości
39 błędów pochodzące od obu weryfikatorów.
43 W niektórych przypadkach sensowna może być możliwość przerwania
44 łańcucha weryfikatorów w przypadku, gdy proces weryfikacji nie uda się.
45 <code>Zend_Validate</code> obsługuje takie przypadki za pomocą
46 ustawienia drugiego parametru w metodzie <code>addValidator()</code>.
47 Ustawiając wartość zmiennej <code>$breakChainOnFailure</code> na
48 <code>true</code>, dodany weryfikator przerwie łańcuchowe wywoływanie
49 przy wystąpieniu błędu, co zapobiegnie uruchamianiu innych weryfikacji,
50 które w danej sytuacji zostaną uznane za bezużyteczne. Jeśli powyższy
51 przykład byłby napisany tak jak poniżej, wtedy weryfikacja znaków
52 alfanumerycznych nie byłaby przeprowadzona jeśli długość łańcucha znaków
53 byłaby nieodpowiednia:
55 <programlisting role="php"><![CDATA[
56 $validatorChain->addValidator(new Zend_Validate_StringLength(6, 12), true)
57 ->addValidator(new Zend_Validate_Alnum());
64 W łańcuchu weryfikatorów może być użyty dowolny obiekt, który implementuje
65 interfejs <code>Zend_Validate_Interface</code>.