| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- <sect1 id="zend.validate.validator_chains">
- <title>Цепочки валидаторов<!--Validator Chains--></title>
- <para>
- Часто к одному и тому же значению должно быть применено несколько
- валидаций в определенном порядке. Следующий код демонстрирует способ
- решения примера из
- <link linkend="zend.validate.introduction">введения</link>, где имя
- пользователя должно быть длиной от 6 до 12 символов и состоять только из
- алфавитно-цифровых символов:
- <!--
- Often multiple validations should be applied to some value in a particular order. The following code
- demonstrates a way to solve the example from the
- <link linkend="zend.validate.introduction">introduction</link>, where a username must be between 6 and
- 12 alphanumeric characters:
- -->
- <programlisting role="php"><![CDATA[<?php
- // Предоставляет возможность создания цепочек валидаторов
- require_once 'Zend/Validate.php';
- // Валидаторы, нужные для примера
- require_once 'Zend/Validate/StringLength.php';
- require_once 'Zend/Validate/Alnum.php';
- // Создает цепочку валидаторов и добавляет валидаторы в нее
- $validatorChain = new Zend_Validate();
- $validatorChain->addValidator(new Zend_Validate_StringLength(6, 12))
- ->addValidator(new Zend_Validate_Alnum());
- // Валидация имени пользователя
- if ($validatorChain->isValid($username)) {
- // имя пользователя прошло валидацию
- } else {
- // имя пользователя не прошло валидацию; вывод причин этого
- foreach ($validatorChain->getMessages() as $message) {
- echo "$message\n";
- }
- }
- ?>]]></programlisting>
- Валидаторы применяются в том же порядке, в котором они были добавлены в
- <code>Zend_Validate</code>. В примере выше сначала проверяется,
- находится ли длина имени пользователя в пределах 6-12 символов, затем
- проверяется, содержит ли имя пользователя только алфавитно-цифровые
- символы. Вторая проверка проводится независимо от того, была ли успешно
- пройдена первая проверка или нет. Это означает, что если обе валидации
- не выли пройдены, то <code>getMessages()</code> вернет сообщения об
- ошибках валидации от обоих валидаторов.
- <!--
- Validators are run in the order they were added to <code>Zend_Validate</code>. In the above example,
- the username is first checked to ensure that its length is between 6 and 12 characters, and then it is
- checked to ensure that it contains only alphanumeric characters. The second validation, for
- alphanumeric characters, is performed regardless of whether the first validation, for length between 6
- and 12 characters, succeeds. This means that if both validations fail, <code>getMessages()</code> will
- return failure messages from both validators.
- -->
- </para>
- <para>
- В некоторых случаях имеет смысл прерывать валидацию, если данные не
- прошли проверку каким-либо валидатором в цепочке.
- <code>Zend_Validate</code> поддерживает такие случаи использования с
- помощью второго параметра метода <code>addValidator()</code>. При
- установке <code>$breakChainOnFailure</code> в <code>true</code>,
- добавленный валидатор будет прерывать выполнение цепочки валидаций в
- случае неудачи, что позволяет избежать выполнение других валидаций,
- которые были бы неуместными в такой ситуации. В примере, переписанном
- как показано ниже, проверка на алфавитно-цифровые символы не должна
- производиться, если не была пройдена проверка на длину строки.
- <!--
- In some cases it makes sense to have a validator break the chain if its validation process
- fails. <code>Zend_Validate</code> supports such use cases with the second parameter to the
- <code>addValidator()</code> method. By setting <code>$breakChainOnFailure</code> to <code>true</code>,
- the added validator will break the chain execution upon failure, which avoids running any other
- validations that are determined to be unnecessary or inappropriate for the situation. If the above
- example were written as follows, then the alphanumeric validation would not occur if the string length
- validation fails:
- -->
- <programlisting role="php"><![CDATA[<?php
- $validatorChain->addValidator(new Zend_Validate_StringLength(6, 12), true)
- ->addValidator(new Zend_Validate_Alnum());]]></programlisting>
- </para>
- <para>
- Любые объекты, реализующие <code>Zend_Validate_Interface</code>, могут
- быть использованы в цепочке валидаторов.
- <!--
- Any object that implements <code>Zend_Validate_Interface</code> may be used in a validator chain.
- -->
- </para>
- </sect1>
- <!--
- vim:se ts=4 sw=4 et:
- -->
|