Zend_Validate.xml 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. <sect1 id="zend.validate.introduction">
  2. <title>Introducción</title>
  3. <para>
  4. Cuando se necesita validar algún tipo de dato, el componente Zend_Validate ofrece un conjunto de validadores,
  5. como así también un sencillo mecanismo de encadenado de validaciones por el cual
  6. múltiples validadores pueden aplicarse a un dato en un orden definido por el usuario.
  7. </para>
  8. <sect2 id="zend.validate.introduction.definition">
  9. <title>¿Qué es un validador?</title>
  10. <para>
  11. Un validador examina su entrada con respecto a algunos requerimientos
  12. y produce un resultado booleano si la entrada valida satisfactoriamente
  13. con los requisitos. Si la entrada no cumple los requisitos,
  14. un validador también podrá proporcionar información adicional
  15. sobre que requisito(s) no son satisfechos.
  16. </para>
  17. <para>
  18. Por ejemplo, una aplicación web podría requerir que un usuario ingrese
  19. su nombre, de entre seis y doce caracteres de longitud y
  20. que sólo puede contener caracteres alfanuméricos.
  21. Se puede usar un validador para asegurar que los usuarios cumplan
  22. estos requisitos.
  23. Si el nombre de usuario elegido no cumple con uno o ambos de los requisitos,
  24. sería útil saber cuál de estos requisitos no se cumple.
  25. </para>
  26. </sect2>
  27. <sect2 id="zend.validate.introduction.using">
  28. <title>Uso básico de validadores</title>
  29. <para>
  30. Habiendo definido la validación de esta manera, Zend Framework nos proporciona el fundamento
  31. para <code>Zend_Validate_Interface</code> que define dos métodos,
  32. <code>isValid()</code> y <code>getMessages()</code>.
  33. El método <code>isValid()</code> realiza la validación del valor,
  34. devolviendo <code>true</code> si y sólo si el valor pasa contra el criterio de
  35. validación.
  36. </para>
  37. <para>
  38. Si <code>isValid()</code> devuelve <code>false</code>, la función
  39. <code>getMessages()</code> devuelve un array de mensajes explicando
  40. el motivo(s) del fracaso de la validación. Las claves del array son
  41. strings cortos que identifican las razones por las cuales fracasó
  42. la validación, y los valores del array son los correspondientes mensajes
  43. para ser leídos por un ser humano.
  44. Las claves y los valores son dependientes de la clase; cada clase de validación
  45. define su propio conjunto de mensajes de validación fallidas y las
  46. claves únicas que las identifican.
  47. Cada clase tiene también una definición <code>const</code>
  48. que hace corresponder a cada identificador con una causa del fallo
  49. de validación.
  50. </para>
  51. <note>
  52. <para>
  53. El método <code>getMessages()</code> devuelve información del fracaso
  54. de la validación sólo para la llamada más reciente a <code>isValid()</code>.
  55. Cada llamada a <code>isValid()</code> borra los mensajes y errores
  56. causados por una llamada anterior <code>isValid()</code>, porque es
  57. probable que cada llamada a <code>isValid()</code> se refiera al valor de una entrada diferente.
  58. </para>
  59. </note>
  60. <para>
  61. El siguiente ejemplo ilustra la validación de una dirección de e-mail:
  62. <programlisting role="php"><![CDATA[
  63. $validator = new Zend_Validate_EmailAddress();
  64. if ($validator->isValid($email)) {
  65. // email parece ser válido
  66. } else {
  67. // email es inválido; muestre la razones
  68. foreach ($validator->getMessages() as $messageId => $message) {
  69. echo "Falla de validación '$messageId': $message\n";
  70. }
  71. }
  72. ]]>
  73. </programlisting>
  74. </para>
  75. </sect2>
  76. <sect2 id="zend.validate.introduction.messages">
  77. <title>Personalizar los mensajes</title>
  78. <para>
  79. Para validar las clases se proporciona un método <code>setMessage()</code>
  80. con el que se puede especificar el formato de un mensaje devuelto por
  81. <code>getMessages()</code> en caso de fallo de validación.
  82. El primer argumento de este método es un string que contiene el mensaje
  83. de error. Usted puede incluir tokens en este array que serán sustituidos
  84. con datos relevantes al validador. El token <code>%value%</code> es aceptado
  85. por todos los validadores, que es sustituido por el valor que pasó a
  86. <code>isValid()</code>. Cada clase de validación, puede dar apoyo a otros
  87. tokens en base a cada caso. Por ejemplo, <code>%max%</code> es un token
  88. apoyado por <code>Zend_Validate_LessThan</code>.
  89. El método <code>getMessageVariables()</code> devuelve un array de tokens
  90. variables aceptados por el validador.
  91. </para>
  92. <para>
  93. El segundo argumento opcional es un string que identifica la plantilla
  94. de mensajes que se establecerá en caso del fracaso de la validación,
  95. lo que es útil cuando una clase de validación define más de una causa para
  96. el fallo.
  97. Si omite el segundo argumento, <code>setMessage()</code> asume que el
  98. mensaje que especifique debe ser utilizado por la plantilla del
  99. primer mensaje que declaró en la clase de validación.
  100. Muchas clases de validación sólo definen una plantilla de mensaje de
  101. error, así que no hay necesidad de especificar el cambio de plantilla
  102. de mensaje.
  103. </para>
  104. <para>
  105. <programlisting role="php"><![CDATA[
  106. $validator = new Zend_Validate_StringLength(8);
  107. $validator->setMessage(
  108. 'El string \'%value%\' es muy corto; debe tener al menos %min% ' .
  109. 'caracteres',
  110. Zend_Validate_StringLength::TOO_SHORT);
  111. if (!$validator->isValid('word')) {
  112. $messages = $validator->getMessages();
  113. echo current($messages);
  114. // "El string 'word' es muy corto; debe tener al menos 8 caracteres"
  115. }
  116. ]]>
  117. </programlisting>
  118. </para>
  119. <para>
  120. Puede establecer varios mensajes usando el método <code>setMessages()</code>.
  121. Su argumento es un array que contiene pares de clave/mensaje.
  122. <programlisting role="php"><![CDATA[
  123. $validator = new Zend_Validate_StringLength(8, 12);
  124. $validator->setMessages( array(
  125. Zend_Validate_StringLength::TOO_SHORT =>
  126. 'El string \'%value%\' es muy corto',
  127. Zend_Validate_StringLength::TOO_LONG =>
  128. 'El string \'%value%\' es muy largo'
  129. ));
  130. ]]>
  131. </programlisting>
  132. </para>
  133. <para>
  134. Incluso, si su aplicación requiere una mayor flexibilidad para informar
  135. los fallos de validación, puede acceder a las propiedades por el
  136. mismo nombre, tal como los tokens de mensajes apoyados por una determinada
  137. clase de validación.
  138. La propiedad <code>value</code> siempre está disponible en un validador;
  139. es el valor que especificó en el argumento de <code>isValid()</code>.
  140. En cada clase de validación se puede dar apoyo a otras propiedades
  141. basándose en el esquema de caso por caso.
  142. <programlisting role="php"><![CDATA[
  143. $validator = new Zend_Validate_StringLength(8, 12);
  144. if (!validator->isValid('word')) {
  145. echo 'Palabra fallada: '
  146. . $validator->value
  147. . '; su longitud no está entre '
  148. . $validator->min
  149. . ' y '
  150. . $validator->max
  151. . "\n";
  152. }
  153. ]]>
  154. </programlisting>
  155. </para>
  156. </sect2>
  157. <sect2 id="zend.validate.introduction.static">
  158. <title>Utilizando el método estático <code>is()</code> </title>
  159. <para>
  160. Si es inconveniente cargar una clase de validación y crear una
  161. instancia del validador, puede usar el método estático
  162. <code>Zend_Validate::is()</code> como un estilo alternativo de invocación.
  163. El primer argumento de este método es el valor de una entrada de datos
  164. que usted pasaría al método <code>isValid()</code>.
  165. El segundo argumento es un string, que corresponde al nombre base
  166. de la clase de validación, relativo al nombre de espacio <code>Zend_Validate</code>.
  167. El método <code>is()</code> carga automáticamente la clase, crea una
  168. instancia y aplica el método <code>isValid()</code> a la entrada de datos.
  169. <programlisting role="php"><![CDATA[
  170. if (Zend_Validate::is($email, 'EmailAddress')) {
  171. // Si, el email parece ser válido
  172. }
  173. ]]>
  174. </programlisting>
  175. </para>
  176. <para>
  177. Si el validador lo necesita, también puede pasar un array de constructores de argumentos.
  178. <programlisting role="php"><![CDATA[
  179. if (Zend_Validate::is($value, 'Between', array(1, 12))) {
  180. // Si, $value está entre 1 y 12
  181. }
  182. ]]>
  183. </programlisting>
  184. </para>
  185. <para>
  186. El método <code>is()</code> devuelve un valor booleano, lo mismo que
  187. el método <code>isValid()</code>. Cuando se utiliza el método estático
  188. <code>is()</code>, no están disponibles los mensajes de fracaso de
  189. validación.
  190. </para>
  191. <para>
  192. El uso estático puede ser conveniente para invocar un validador ad-hoc
  193. (hecho especialmente), pero si tiene la necesidad de ejecutar el validador para múltiples
  194. entradas, es más eficiente usar métodos no estáticos, creando una
  195. instancia del objeto validador y llamando a su método <code>isValid()</code>.
  196. </para>
  197. <para>
  198. También la clase <code>Zend_Filter_Input</code> le permite crear
  199. ejemplos y ejecutar múltiples filtros y clases de validadores por
  200. demanda, para procesar juegos de datos de entrada. Ver
  201. <xref linkend="zend.filter.input" />.
  202. </para>
  203. </sect2>
  204. </sect1>
  205. <!--
  206. vim:se ts=4 sw=4 et:
  207. -->