[ZF-10089] Zend_Log
[zend.git] / documentation / manual / ru / module_specs / Zend_Validate-ValidatorChains.xml
blobb3eacb5d98a2f775b27f8a5f5d8840be4c91e323
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!-- Reviewed: no -->
3 <sect1 id="zend.validate.validator_chains">
5     <title>Цепочки валидаторов</title>
7     <para>
8         Часто к одному и тому же значению должно быть применено несколько
9         валидаций в определенном порядке. Следующий код демонстрирует способ
10         решения примера из
11         <link linkend="zend.validate.introduction">введения</link>, где имя
12         пользователя должно быть длиной от 6 до 12 символов и состоять только из
13         алфавитно-цифровых символов:
15         <programlisting language="php"><![CDATA[
16 // Создает цепочку валидаторов и добавляет валидаторы в нее
17 $validatorChain = new Zend_Validate();
18 $validatorChain->addValidator(new Zend_Validate_StringLength(6, 12))
19                ->addValidator(new Zend_Validate_Alnum());
21 // Валидация имени пользователя
22 if ($validatorChain->isValid($username)) {
23     // имя пользователя прошло валидацию
24 } else {
25     // имя пользователя не прошло валидацию; вывод причин этого
26     foreach ($validatorChain->getMessages() as $message) {
27         echo "$message\n";
28     }
30 ]]></programlisting>
32         Валидаторы применяются в том же порядке, в котором они были добавлены в
33         <classname>Zend_Validate</classname>. В примере выше сначала проверяется,
34         находится ли длина имени пользователя в пределах 6-12 символов, затем
35         проверяется, содержит ли имя пользователя только алфавитно-цифровые
36         символы. Вторая проверка проводится независимо от того, была ли успешно
37         пройдена первая проверка. Это означает, что если обе валидации
38         не были пройдены, то <code>getMessages()</code> вернет сообщения об
39         ошибках валидации от обоих валидаторов.
40     </para>
42     <para>
43         В некоторых случаях имеет смысл прерывать валидацию, если данные не
44         прошли проверку каким-либо валидатором в цепочке.
45         <classname>Zend_Validate</classname> обеспечивает эту возможность с
46         помощью второго параметра метода <code>addValidator()</code>. При
47         установке <varname>$breakChainOnFailure</varname> в <constant>TRUE</constant>,
48         добавленный валидатор будет прерывать выполнение цепочки валидаций в
49         случае неудачи. Это позволяет избежать выполнения других валидаций,
50         которые были бы излишними или неподходящими в данной ситуации.
51         Ниже приводится переписанный пример, в котором проверка на
52         алфавитно-цифровые символы не должна
53         производиться, если не была пройдена проверка на длину строки:
55         <programlisting language="php"><![CDATA[
56 $validatorChain->addValidator(new Zend_Validate_StringLength(6, 12), true)
57         ->addValidator(new Zend_Validate_Alnum());
58 ]]></programlisting>
60     </para>
62     <para>
63         Любые объекты, реализующие
64         <classname>Zend_Validate_Interface</classname>, могут быть
65         использованы в цепочке валидаторов.
66     </para>
68 </sect1>
69 <!--
70 vim:se ts=4 sw=4 et:
71 -->