Zend_Validate-ValidatorChains.xml 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 19432 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.validate.validator_chains">
  5. <title>Cadenas de Validadores</title>
  6. <para>Frecuentemente deben aplicarse múltiples validaciones a algún valor
  7. en un orden particular. El siguiente código demuestra una forma de
  8. resolver el ejemplo de la <link linkend="zend.validate.introduction"
  9. >introducción</link>, donde el nombre de usuario debe tener entre 6
  10. y 12 caracteres alfanuméricos.
  11. </para>
  12. <programlisting language="php"><![CDATA[
  13. // Crea una cadena de validadores y le agrega validadores
  14. $validatorChain = new Zend_Validate();
  15. $validatorChain->addValidator(
  16. new Zend_Validate_StringLength(array('min' => 6,
  17. 'max' => 12)))
  18. ->addValidator(new Zend_Validate_Alnum());
  19. // Valida el username
  20. if ($validatorChain->isValid($username)) {
  21. // username pasó la validación
  22. } else {
  23. // username falló en la validación; muestre las razones
  24. foreach ($validatorChain->getMessages() as $message) {
  25. echo "$message\n";
  26. }
  27. }
  28. ]]></programlisting>
  29. <para>
  30. Los validadores se ejecutan en el orden en que se agregaron
  31. a <methodname>Zend_Validate</methodname>. En el ejemplo anterior, el
  32. nombre de usuario, primero se comprueba que su longitud esté entre 6 y
  33. 12 caracteres y luego se controla para garantizar que sólo contiene
  34. caracteres alfanuméricos. La segunda validación; de caracteres
  35. alfanuméricos; se realiza independientemente de que la primera
  36. validación; de longitud entre 6 y 12 caracteres; tenga éxito. Esto
  37. significa que si ambas validaciones fallan,
  38. <methodname>getMessages()</methodname> devolverá mensajes de fracaso
  39. desde ambos validadores.</para>
  40. <para>En algunos casos tiene sentido detener la cadena de validación si
  41. falla alguno de los procesos de validación.
  42. <classname>Zend_Validate</classname> acepta tales casos pasando como
  43. segundo parámetro el método <methodname>addValidator()</methodname>.
  44. Poniendo <methodname>$breakChainOnFailure</methodname> a
  45. <constant>TRUE</constant>, el validador agregado quebrará la cadena
  46. de ejecución por el fracaso, que evita correr cualquier otra validación
  47. que se decida que es innecesaria o inapropiada para la situación. Si el
  48. ejemplo anterior fue escrito como sigue, entonces el sistema de
  49. validación alfanumérica no se ejecutará si falla la longitud del string
  50. de validación:
  51. </para>
  52. <programlisting language="php"><![CDATA[
  53. $validatorChain->addValidator(
  54. new Zend_Validate_StringLength(array('min' => 6,
  55. 'max' => 12)),
  56. true)
  57. ->addValidator(new Zend_Validate_Alnum());
  58. ]]></programlisting>
  59. <para>Cualquier objeto que implemente
  60. <classname>Zend_Validate_Interface</classname> puede ser utilizado
  61. en una cadena de validación.</para>
  62. </sect1>