Zend_Validate-ValidatorChains.xml 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. <sect1 id="zend.validate.validator_chains">
  2. <title>Цепочки валидаторов<!--Validator Chains--></title>
  3. <para>
  4. Часто к одному и тому же значению должно быть применено несколько
  5. валидаций в определенном порядке. Следующий код демонстрирует способ
  6. решения примера из
  7. <link linkend="zend.validate.introduction">введения</link>, где имя
  8. пользователя должно быть длиной от 6 до 12 символов и состоять только из
  9. алфавитно-цифровых символов:
  10. <!--
  11. Often multiple validations should be applied to some value in a particular order. The following code
  12. demonstrates a way to solve the example from the
  13. <link linkend="zend.validate.introduction">introduction</link>, where a username must be between 6 and
  14. 12 alphanumeric characters:
  15. -->
  16. <programlisting role="php"><![CDATA[<?php
  17. // Предоставляет возможность создания цепочек валидаторов
  18. require_once 'Zend/Validate.php';
  19. // Валидаторы, нужные для примера
  20. require_once 'Zend/Validate/StringLength.php';
  21. require_once 'Zend/Validate/Alnum.php';
  22. // Создает цепочку валидаторов и добавляет валидаторы в нее
  23. $validatorChain = new Zend_Validate();
  24. $validatorChain->addValidator(new Zend_Validate_StringLength(6, 12))
  25. ->addValidator(new Zend_Validate_Alnum());
  26. // Валидация имени пользователя
  27. if ($validatorChain->isValid($username)) {
  28. // имя пользователя прошло валидацию
  29. } else {
  30. // имя пользователя не прошло валидацию; вывод причин этого
  31. foreach ($validatorChain->getMessages() as $message) {
  32. echo "$message\n";
  33. }
  34. }
  35. ?>]]></programlisting>
  36. Валидаторы применяются в том же порядке, в котором они были добавлены в
  37. <code>Zend_Validate</code>. В примере выше сначала проверяется,
  38. находится ли длина имени пользователя в пределах 6-12 символов, затем
  39. проверяется, содержит ли имя пользователя только алфавитно-цифровые
  40. символы. Вторая проверка проводится независимо от того, была ли успешно
  41. пройдена первая проверка или нет. Это означает, что если обе валидации
  42. не выли пройдены, то <code>getMessages()</code> вернет сообщения об
  43. ошибках валидации от обоих валидаторов.
  44. <!--
  45. Validators are run in the order they were added to <code>Zend_Validate</code>. In the above example,
  46. the username is first checked to ensure that its length is between 6 and 12 characters, and then it is
  47. checked to ensure that it contains only alphanumeric characters. The second validation, for
  48. alphanumeric characters, is performed regardless of whether the first validation, for length between 6
  49. and 12 characters, succeeds. This means that if both validations fail, <code>getMessages()</code> will
  50. return failure messages from both validators.
  51. -->
  52. </para>
  53. <para>
  54. В некоторых случаях имеет смысл прерывать валидацию, если данные не
  55. прошли проверку каким-либо валидатором в цепочке.
  56. <code>Zend_Validate</code> поддерживает такие случаи использования с
  57. помощью второго параметра метода <code>addValidator()</code>. При
  58. установке <code>$breakChainOnFailure</code> в <code>true</code>,
  59. добавленный валидатор будет прерывать выполнение цепочки валидаций в
  60. случае неудачи, что позволяет избежать выполнение других валидаций,
  61. которые были бы неуместными в такой ситуации. В примере, переписанном
  62. как показано ниже, проверка на алфавитно-цифровые символы не должна
  63. производиться, если не была пройдена проверка на длину строки.
  64. <!--
  65. In some cases it makes sense to have a validator break the chain if its validation process
  66. fails. <code>Zend_Validate</code> supports such use cases with the second parameter to the
  67. <code>addValidator()</code> method. By setting <code>$breakChainOnFailure</code> to <code>true</code>,
  68. the added validator will break the chain execution upon failure, which avoids running any other
  69. validations that are determined to be unnecessary or inappropriate for the situation. If the above
  70. example were written as follows, then the alphanumeric validation would not occur if the string length
  71. validation fails:
  72. -->
  73. <programlisting role="php"><![CDATA[<?php
  74. $validatorChain->addValidator(new Zend_Validate_StringLength(6, 12), true)
  75. ->addValidator(new Zend_Validate_Alnum());]]></programlisting>
  76. </para>
  77. <para>
  78. Любые объекты, реализующие <code>Zend_Validate_Interface</code>, могут
  79. быть использованы в цепочке валидаторов.
  80. <!--
  81. Any object that implements <code>Zend_Validate_Interface</code> may be used in a validator chain.
  82. -->
  83. </para>
  84. </sect1>
  85. <!--
  86. vim:se ts=4 sw=4 et:
  87. -->