Zend_Validate.xml 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 15103 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.validate.introduction">
  5. <title>Introducción</title>
  6. <para>
  7. Cuando se necesita validar algún tipo de dato, el componente <classname>Zend_Validate</classname> ofrece un conjunto de validadores,
  8. como así también un sencillo mecanismo de encadenado de validaciones por el cual
  9. múltiples validadores pueden aplicarse a un dato en un orden definido por el usuario.
  10. </para>
  11. <sect2 id="zend.validate.introduction.definition">
  12. <title>¿Qué es un validador?</title>
  13. <para>
  14. Un validador examina su entrada con respecto a algunos requerimientos
  15. y produce un resultado booleano si la entrada valida satisfactoriamente
  16. con los requisitos. Si la entrada no cumple los requisitos,
  17. un validador también podrá proporcionar información adicional
  18. sobre que requisito(s) no son satisfechos.
  19. </para>
  20. <para>
  21. Por ejemplo, una aplicación web podría requerir que un usuario ingrese
  22. su nombre, de entre seis y doce caracteres de longitud y
  23. que sólo puede contener caracteres alfanuméricos.
  24. Se puede usar un validador para asegurar que los usuarios cumplan
  25. estos requisitos.
  26. Si el nombre de usuario elegido no cumple con uno o ambos de los requisitos,
  27. sería útil saber cuál de estos requisitos no se cumple.
  28. </para>
  29. </sect2>
  30. <sect2 id="zend.validate.introduction.using">
  31. <title>Uso básico de validadores</title>
  32. <para>
  33. Habiendo definido la validación de esta manera, Zend Framework nos proporciona el fundamento
  34. para <classname>Zend_Validate_Interface</classname> que define dos métodos,
  35. <methodname>isValid()</methodname> y <methodname>getMessages()</methodname>.
  36. El método <methodname>isValid()</methodname> realiza la validación del valor,
  37. devolviendo <methodname>true</methodname> si y sólo si el valor pasa contra el criterio de
  38. validación.
  39. </para>
  40. <para>
  41. Si <methodname>isValid()</methodname> devuelve <methodname>false</methodname>, la función
  42. <methodname>getMessages()</methodname> devuelve un array de mensajes explicando
  43. el motivo(s) del fracaso de la validación. Las claves del array son
  44. strings cortos que identifican las razones por las cuales fracasó
  45. la validación, y los valores del array son los correspondientes mensajes
  46. para ser leídos por un ser humano.
  47. Las claves y los valores son dependientes de la clase; cada clase de validación
  48. define su propio conjunto de mensajes de validación fallidas y las
  49. claves únicas que las identifican.
  50. Cada clase tiene también una definición <methodname>const</methodname>
  51. que hace corresponder a cada identificador con una causa del fallo
  52. de validación.
  53. </para>
  54. <note>
  55. <para>
  56. El método <methodname>getMessages()</methodname> devuelve información del fracaso
  57. de la validación sólo para la llamada más reciente a <methodname>isValid()</methodname>.
  58. Cada llamada a <methodname>isValid()</methodname> borra los mensajes y errores
  59. causados por una llamada anterior <methodname>isValid()</methodname>, porque es
  60. probable que cada llamada a <methodname>isValid()</methodname> se refiera al valor de una entrada diferente.
  61. </para>
  62. </note>
  63. <para>
  64. El siguiente ejemplo ilustra la validación de una dirección de e-mail:
  65. <programlisting language="php"><![CDATA[
  66. $validator = new Zend_Validate_EmailAddress();
  67. if ($validator->isValid($email)) {
  68. // email parece ser válido
  69. } else {
  70. // email es inválido; muestre la razones
  71. foreach ($validator->getMessages() as $messageId => $message) {
  72. echo "Falla de validación '$messageId': $message\n";
  73. }
  74. }
  75. ]]></programlisting>
  76. </para>
  77. </sect2>
  78. <sect2 id="zend.validate.introduction.messages">
  79. <title>Personalizar los mensajes</title>
  80. <para>
  81. Para validar las clases se proporciona un método <methodname>setMessage()</methodname>
  82. con el que se puede especificar el formato de un mensaje devuelto por
  83. <methodname>getMessages()</methodname> en caso de fallo de validación.
  84. El primer argumento de este método es un string que contiene el mensaje
  85. de error. Usted puede incluir tokens en este array que serán sustituidos
  86. con datos relevantes al validador. El token <methodname>%value%</methodname> es aceptado
  87. por todos los validadores, que es sustituido por el valor que pasó a
  88. <methodname>isValid()</methodname>. Cada clase de validación, puede dar apoyo a otros
  89. tokens en base a cada caso. Por ejemplo, <methodname>%max%</methodname> es un token
  90. apoyado por <classname>Zend_Validate_LessThan</classname>.
  91. El método <methodname>getMessageVariables()</methodname> devuelve un array de tokens
  92. variables aceptados por el validador.
  93. </para>
  94. <para>
  95. El segundo argumento opcional es un string que identifica la plantilla
  96. de mensajes que se establecerá en caso del fracaso de la validación,
  97. lo que es útil cuando una clase de validación define más de una causa para
  98. el fallo.
  99. Si omite el segundo argumento, <methodname>setMessage()</methodname> asume que el
  100. mensaje que especifique debe ser utilizado por la plantilla del
  101. primer mensaje que declaró en la clase de validación.
  102. Muchas clases de validación sólo definen una plantilla de mensaje de
  103. error, así que no hay necesidad de especificar el cambio de plantilla
  104. de mensaje.
  105. </para>
  106. <para>
  107. <programlisting language="php"><![CDATA[
  108. $validator = new Zend_Validate_StringLength(8);
  109. $validator->setMessage(
  110. 'El string \'%value%\' es muy corto; debe tener al menos %min% ' .
  111. 'caracteres',
  112. Zend_Validate_StringLength::TOO_SHORT);
  113. if (!$validator->isValid('word')) {
  114. $messages = $validator->getMessages();
  115. echo current($messages);
  116. // "El string 'word' es muy corto; debe tener al menos 8 caracteres"
  117. }
  118. ]]></programlisting>
  119. </para>
  120. <para>
  121. Puede establecer varios mensajes usando el método <methodname>setMessages()</methodname>.
  122. Su argumento es un array que contiene pares de clave/mensaje.
  123. <programlisting language="php"><![CDATA[
  124. $validator = new Zend_Validate_StringLength(8, 12);
  125. $validator->setMessages( array(
  126. Zend_Validate_StringLength::TOO_SHORT =>
  127. 'El string \'%value%\' es muy corto',
  128. Zend_Validate_StringLength::TOO_LONG =>
  129. 'El string \'%value%\' es muy largo'
  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 <methodname>value</methodname> siempre está disponible en un validador;
  139. es el valor que especificó en el argumento de <methodname>isValid()</methodname>.
  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 language="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. ]]></programlisting>
  154. </para>
  155. </sect2>
  156. <sect2 id="zend.validate.introduction.static">
  157. <title>Utilizando el método estático <methodname>is()</methodname> </title>
  158. <para>
  159. Si es inconveniente cargar una clase de validación y crear una
  160. instancia del validador, puede usar el método estático
  161. <classname>Zend_Validate::is()</classname> como un estilo alternativo de invocación.
  162. El primer argumento de este método es el valor de una entrada de datos
  163. que usted pasaría al método <methodname>isValid()</methodname>.
  164. El segundo argumento es un string, que corresponde al nombre base
  165. de la clase de validación, relativo al nombre de espacio <classname>Zend_Validate</classname>.
  166. El método <methodname>is()</methodname> carga automáticamente la clase, crea una
  167. instancia y aplica el método <methodname>isValid()</methodname> a la entrada de datos.
  168. <programlisting language="php"><![CDATA[
  169. if (Zend_Validate::is($email, 'EmailAddress')) {
  170. // Si, el email parece ser válido
  171. }
  172. ]]></programlisting>
  173. </para>
  174. <para>
  175. Si el validador lo necesita, también puede pasar un array de constructores de argumentos.
  176. <programlisting language="php"><![CDATA[
  177. if (Zend_Validate::is($value, 'Between', array(1, 12))) {
  178. // Si, $value está entre 1 y 12
  179. }
  180. ]]></programlisting>
  181. </para>
  182. <para>
  183. El método <methodname>is()</methodname> devuelve un valor booleano, lo mismo que
  184. el método <methodname>isValid()</methodname>. Cuando se utiliza el método estático
  185. <methodname>is()</methodname>, no están disponibles los mensajes de fracaso de
  186. validación.
  187. </para>
  188. <para>
  189. El uso estático puede ser conveniente para invocar un validador ad-hoc
  190. (hecho especialmente), pero si tiene la necesidad de ejecutar el validador para múltiples
  191. entradas, es más eficiente usar métodos no estáticos, creando una
  192. instancia del objeto validador y llamando a su método <methodname>isValid()</methodname>.
  193. </para>
  194. <para>
  195. También la clase <classname>Zend_Filter_Input</classname> le permite crear
  196. ejemplos y ejecutar múltiples filtros y clases de validadores por
  197. demanda, para procesar juegos de datos de entrada. Ver
  198. <xref linkend="zend.filter.input" />.
  199. </para>
  200. </sect2>
  201. <sect2 id="zend.validate.introduction.translation">
  202. <title>Translating messages</title>
  203. <para>
  204. Validate classes provide a <methodname>setTranslator()</methodname> method with
  205. which you can specify a instance of <classname>Zend_Translate</classname> which
  206. will translate the messages in case of a validation failure. The
  207. <methodname>getTranslator()</methodname> method returns the set translator instance.
  208. </para>
  209. <programlisting language="php"><![CDATA[
  210. $validator = new Zend_Validate_StringLength(8, 12);
  211. $translate = new Zend_Translate(
  212. 'array',
  213. array(Zend_Validate_StringLength::TOO_SHORT => 'Translated \'%value%\''),
  214. 'en'
  215. );
  216. $validator->setTranslator($translate);
  217. ]]></programlisting>
  218. <para>
  219. With the static <methodname>setDefaultTranslator()</methodname> method you can set
  220. a instance of <classname>Zend_Translate</classname> which will be used for all
  221. validation classes, and can be retrieved with <methodname>getDefaultTranslator()</methodname>.
  222. This prevents you from setting a translator manually for all validator classes,
  223. and simplifies your code.
  224. </para>
  225. <programlisting language="php"><![CDATA[
  226. $translate = new Zend_Translate(
  227. 'array',
  228. array(Zend_Validate_StringLength::TOO_SHORT => 'Translated \'%value%\''),
  229. 'en'
  230. );
  231. Zend_Validate::setDefaultTranslator($translate);
  232. ]]></programlisting>
  233. <note>
  234. <para>
  235. When you have set an application wide locale within your registry, then this
  236. locale will be used as default translator.
  237. </para>
  238. </note>
  239. <para>
  240. Sometimes it is necessary to disable the translator within a validator.
  241. To archive this you can use the <methodname>setDisableTranslator()</methodname> method,
  242. which accepts a boolean parameter, and <methodname>translatorIsDisabled()</methodname>
  243. to get the set value.
  244. </para>
  245. <programlisting language="php"><![CDATA[
  246. $validator = new Zend_Validate_StringLength(8, 12);
  247. if (!$validator->isTranslatorDisabled()) {
  248. $validator->setDisableTranslator();
  249. }
  250. ]]></programlisting>
  251. <para>
  252. It is also possible to use a translator instead of setting own messages with
  253. <methodname>setMessage()</methodname>. But doing so, you should keep in mind, that the
  254. translator works also on messages you set your own.
  255. </para>
  256. </sect2>
  257. </sect1>
  258. <!--
  259. vim:se ts=4 sw=4 et:
  260. -->