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