Zend_Validate.xml 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. <sect1 id="zend.validate.introduction">
  2. <title>Wprowadzenie</title>
  3. <para>
  4. Komponent Zend_Validate zapewnia zestaw najczęściej potrzebnych
  5. weryfikatorów. Zapewnia też prosty mechanizm łańcuchowego wywoływania
  6. weryfikatorów, dzięki ktoremu wiele filtrów może być dodanych do jednej
  7. danej w kolejności zdefiniowanej przez programistę.
  8. </para>
  9. <sect2 id="zend.validate.introduction.definition">
  10. <title>Czym jest weryfikator?</title>
  11. <para>
  12. Weryfikator bada dane wejściowe w oparciu o pewne wymagania i tworzy
  13. wynik w postaci wartości logicznej - wartość ta mówi czy dane
  14. wejściowe spełniają te wymagania. Jeśli dane wejściowe nie spełniają
  15. wymagań, weryfikator może dodatkowo przekazać informacje o tym, które
  16. z wymagań nie zostały spełnione.
  17. </para>
  18. <para>
  19. Na przykład, aplikacja web może wymagać, aby długość nazwy użytkownika
  20. mieściła się pomiędzy sześcioma a dwunastoma znakami, a znaki te były
  21. jedynie z grupy znaków alfanumerycznych. Weryfikator może być użyty do
  22. sprawdzenia czy nazwa użytkownika spełnia te wymagania. Jeśli wybrana
  23. nazwa użytkownika nie spełni jednego lub obu tych wymagań, użytecznie
  24. by było wiedzieć, które z wymagań nie zostało spełnione.
  25. </para>
  26. </sect2>
  27. <sect2 id="zend.validate.introduction.using">
  28. <title>Podstawowe użycie weryfikatorów</title>
  29. <para>
  30. Mająć ustaloną w ten sposób definicję weryfikacji, możemy zapewnić
  31. podstawę dla interfejsu <code>Zend_Validate_Interface</code>, który
  32. wymaga zaimplementowania przez klasę weryfikatora dwóch metod,
  33. <code>isValid()</code> oraz <code>getMessages()</code>. Metoda
  34. <code>isValid()</code> przeprowadza weryfikację podanej wartości,
  35. zwracając <code>true</code> wtedy i tylko wtedy, gdy wartość
  36. spełnia kryteria weryfikacji.
  37. </para>
  38. <para>
  39. Jeśli metoda <code>isValid()</code> zwróci <code>false</code>, za
  40. pomocą metody <code>getMessages()</code> można pobrać tablicę
  41. wiadomości wyjaśniających powody niepowodzenia weryfikacji.
  42. Klucze elementów tablicy są krótkimi łańcuchami znaków, które
  43. identyfikują powody nieudanej weryfikacji, a wartości elementów
  44. odpowiadają pełnym treściom komunikatów. Klucze i wartości są
  45. zależne od klasy; każda klasa weryfikatora definiuje własny zestaw
  46. komunikatów o nieudanej weryfikacji, a także klucze identyfikujące je.
  47. Każda klasa posiada także definicje stałych <code>const</code>, które
  48. odpowiadają identyfikatorom komunikatów o nieudanej weryfikacji.
  49. </para>
  50. <note>
  51. <para>
  52. Metoda <code>getMessages()</code>
  53. zwracaja informacje o nieudanej weryfikacji tylko dla ostatniego
  54. wywołania metody <code>isValid()</code>. Każde wywołanie metody
  55. <code>isValid()</code> czyści wszystkie komunikaty i błędy,
  56. które wystąpiły podczas poprzedniego wywołania metody
  57. <code>isValid()</code>, ponieważ najczęściej jest tak, że każde
  58. wywołanie metody <code>isValid()</code> występuje dla innej
  59. wartości danych przychodzących.
  60. </para>
  61. </note>
  62. <para>
  63. Poniższy przykład pokazuje weryfikację adresu e-mail:
  64. <programlisting role="php"><![CDATA[
  65. $validator = new Zend_Validate_EmailAddress();
  66. if ($validator->isValid($email)) {
  67. // adres email jest prawidłowy
  68. } else {
  69. // adres email jest nieprawidłowy; wyświetlamy komunikat
  70. foreach ($validator->getMessages() as $messageId => $message) {
  71. echo "Weryfikacja nieudana '$messageId': $message\n";
  72. }
  73. }
  74. ]]>
  75. </programlisting>
  76. </para>
  77. </sect2>
  78. <sect2 id="zend.validate.introduction.messages">
  79. <title>Własne komunikaty</title>
  80. <para>
  81. Klasy weryfikatorów zapewniają metodę <code>setMessage()</code> za
  82. pomocą które możesz określić format komunikatu zwracanego przez
  83. metodę <code>getMessages()</code> w przypadku nieudanej weryfikacji.
  84. Pierwszy argument tej metody jest łańcuchem znaków zawierającym
  85. treść komunikatu błędu. W tym łańcuchu znaków możesz użyć
  86. identyfikatorów, które zostaną zastąpione odpowiednimi danymi
  87. pochodzącymi z weryfikatora. Identyfikator <code>%value%</code> jest
  88. obsługiwany przez wszystkie weryfikatory; będzie on zastąpiony
  89. wartością, która została przekazana do metody <code>isValid()</code>.
  90. Inne identyfikatory mogą być obsługiwane indywidualnie w każdej
  91. klasie weryfikatora. Na przykład identyfikator <code>%max%</code> jest
  92. obsługiwany przez klasę <code>Zend_Validate_LessThan</code>.
  93. Metoda <code>getMessageVariables()</code> zwraca tablicę
  94. identyfikatorów obsługiwanych przez weryfikator.
  95. </para>
  96. <para>
  97. Drugi opcjonalny argument jest łańcuchem znaków, który identyfikuje
  98. szablon komunikatu który chcesz ustawić, co jest przydatne gdy
  99. klasa definiuje więcej niż jeden komunikatów o błędach.
  100. Jeśli pominiesz drugi argument, metoda <code>setMessage()</code>
  101. założy, że komunikat, który określisz powinien być użyty dla
  102. pierwszego szablonu komunikatu zadeklarowanego w klasie weryfikatora.
  103. Wiele klas weryfikatorów posiada tylko jeden szablon komunikatu błędu,
  104. więc nie ma potrzeby dokładnego określania szablonu komunikatu, który
  105. chcesz nadpisać.
  106. </para>
  107. <para>
  108. <programlisting role="php"><![CDATA[
  109. $validator = new Zend_Validate_StringLength(8);
  110. $validator->setMessage(
  111. 'Łańcuch znaków \'%value%\' jest za krotki; ' .
  112. 'musi składać się z przynajmniej %min% znaków',
  113. Zend_Validate_StringLength::TOO_SHORT);
  114. if (!$validator->isValid('word')) {
  115. $messages = $validator->getMessages();
  116. echo current($messages);
  117. // "Łańcuch znaków 'word' jest za krotki;
  118. // musi składać się z przynajmniej 8 znaków"
  119. }
  120. ]]>
  121. </programlisting>
  122. </para>
  123. <para>
  124. Możesz ustawić wiele komunikatów na raz używając metody
  125. <code>setMessages()</code>. Jej argumentem jest tablica zawierająca
  126. pary klucz/komunikat.
  127. <programlisting role="php"><![CDATA[
  128. $validator = new Zend_Validate_StringLength(8, 12);
  129. $validator->setMessages( array(
  130. Zend_Validate_StringLength::TOO_SHORT =>
  131. 'Łańcuch znaków \'%value%\' jest za krótki',
  132. Zend_Validate_StringLength::TOO_LONG =>
  133. 'Łańcuch znaków \'%value%\' jest za długi'
  134. ));
  135. ]]>
  136. </programlisting>
  137. </para>
  138. <para>
  139. Jeśli twoja aplikacja wymaga większej elastyczności w związku z
  140. raportowaniem nieudanej weryfikacji, możesz uzyskać dostęp do
  141. właściwości używając tych samych nazw, co identyfikatory komunikatów
  142. używane przez daną klasę weryfikatora. Właściwość <code>value</code>
  143. jest zawsze dostępna w weryfikatorze; jest to wartość, która została
  144. podana jako argument metody <code>isValid()</code>. Inne właściwości
  145. mogą być obsługiwane indywidualnie w każdej klasie weryfikatora.
  146. <programlisting role="php"><![CDATA[
  147. $validator = new Zend_Validate_StringLength(8, 12);
  148. if (!validator->isValid('word')) {
  149. echo 'Słowo niepoprawne: '
  150. . $validator->value
  151. . '; długość nie jest pomiędzy '
  152. . $validator->min
  153. . ' i '
  154. . $validator->max
  155. . "\n";
  156. }
  157. ]]>
  158. </programlisting>
  159. </para>
  160. </sect2>
  161. <sect2 id="zend.validate.introduction.static">
  162. <title>Użycie statycznej metody <code>is()</code></title>
  163. <para>
  164. Jeśli niewygodne jest ładowanie danej klasy weryfikatora i tworzenie
  165. instancji weryfikatora, możesz użyć statycznej metody
  166. <code>Zend_Validate::is()</code> jako alternatywnego sposobu
  167. wywołania. Pierwszym argumentem tej metody są dane wejściowe, które
  168. chcesz przekazać do metody <code>isValid()</code>. Drugi argument
  169. jest łańcuchem znaków, który odpowiada, bazowej nazwie klasy
  170. weryfikatora, relatywnie do przestrzeni nazw <code>Zend_Validate</code>.
  171. Metoda <code>is()</code> automatycznie ładuje klasę, tworzy instancję
  172. i wywołuje metodę <code>isValid()</code> na danych wejściowych.
  173. <programlisting role="php"><![CDATA[
  174. if (Zend_Validate::is($email, 'EmailAddress')) {
  175. // Tak, adres email jest poprawny
  176. }
  177. ]]>
  178. </programlisting>
  179. </para>
  180. <para>
  181. Możesz także przekazać tablicę argumentów konstruktora, jeśli są
  182. one potrzebne w klasie weryfikatora.
  183. <programlisting role="php"><![CDATA[
  184. if (Zend_Validate::is($value, 'Between', array(1, 12))) {
  185. // Tak, wartość $value jest pomiędzy 1 i 12
  186. }
  187. ]]>
  188. </programlisting>
  189. </para>
  190. <para>
  191. Metoda <code>is()</code> zwraca wartość logiczną, taką samą jak
  192. metoda <code>isValid()</code>. Gdy używana jest metoda statyczna
  193. <code>is()</code>, komunikaty o nieudanej weryfikacji są niedostępne.
  194. </para>
  195. <para>
  196. Użycie statyczne może być wygodne dla jednorazowego wywołania
  197. weryfikatora, ale jeśli musisz wywołać weryfikator dla większej ilości
  198. danych, bardziej efektywne jest wykorzystanie rozwiązania
  199. niestatycznego, czyli utworzenie instancji obiektu weryfikatora
  200. i wywołanie metody <code>isValid()</code>.
  201. </para>
  202. <para>
  203. Dodatkowo klasa <code>Zend_Filter_Input</code> pozwala na utworzenie
  204. instancji i wywołanie większej ilości klas filtrów i weryfikatorów w
  205. celu przetworzenia zestawu danych wejściowych. Zobacz
  206. <xref linkend="zend.filter.input" />.
  207. </para>
  208. </sect2>
  209. </sect1>