Zend_Validate-ValidatorChains.xml 3.0 KB

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