| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 15103 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.validate.introduction">
- <title>Introducción</title>
- <para>
- Cuando se necesita validar algún tipo de dato, el componente <classname>Zend_Validate</classname> ofrece un conjunto de validadores,
- como así también un sencillo mecanismo de encadenado de validaciones por el cual
- múltiples validadores pueden aplicarse a un dato en un orden definido por el usuario.
- </para>
- <sect2 id="zend.validate.introduction.definition">
- <title>¿Qué es un validador?</title>
- <para>
- Un validador examina su entrada con respecto a algunos requerimientos
- y produce un resultado booleano si la entrada valida satisfactoriamente
- con los requisitos. Si la entrada no cumple los requisitos,
- un validador también podrá proporcionar información adicional
- sobre que requisito(s) no son satisfechos.
- </para>
- <para>
- Por ejemplo, una aplicación web podría requerir que un usuario ingrese
- su nombre, de entre seis y doce caracteres de longitud y
- que sólo puede contener caracteres alfanuméricos.
- Se puede usar un validador para asegurar que los usuarios cumplan
- estos requisitos.
- Si el nombre de usuario elegido no cumple con uno o ambos de los requisitos,
- sería útil saber cuál de estos requisitos no se cumple.
- </para>
- </sect2>
- <sect2 id="zend.validate.introduction.using">
- <title>Uso básico de validadores</title>
- <para>
- Habiendo definido la validación de esta manera, Zend Framework nos proporciona el fundamento
- para <classname>Zend_Validate_Interface</classname> que define dos métodos,
- <code>isValid()</code> y <code>getMessages()</code>.
- El método <code>isValid()</code> realiza la validación del valor,
- devolviendo <code>true</code> si y sólo si el valor pasa contra el criterio de
- validación.
- </para>
- <para>
- Si <code>isValid()</code> devuelve <code>false</code>, la función
- <code>getMessages()</code> devuelve un array de mensajes explicando
- el motivo(s) del fracaso de la validación. Las claves del array son
- strings cortos que identifican las razones por las cuales fracasó
- la validación, y los valores del array son los correspondientes mensajes
- para ser leídos por un ser humano.
- Las claves y los valores son dependientes de la clase; cada clase de validación
- define su propio conjunto de mensajes de validación fallidas y las
- claves únicas que las identifican.
- Cada clase tiene también una definición <code>const</code>
- que hace corresponder a cada identificador con una causa del fallo
- de validación.
- </para>
- <note>
- <para>
- El método <code>getMessages()</code> devuelve información del fracaso
- de la validación sólo para la llamada más reciente a <code>isValid()</code>.
- Cada llamada a <code>isValid()</code> borra los mensajes y errores
- causados por una llamada anterior <code>isValid()</code>, porque es
- probable que cada llamada a <code>isValid()</code> se refiera al valor de una entrada diferente.
- </para>
- </note>
- <para>
- El siguiente ejemplo ilustra la validación de una dirección de e-mail:
- <programlisting role="php"><![CDATA[
- $validator = new Zend_Validate_EmailAddress();
- if ($validator->isValid($email)) {
- // email parece ser válido
- } else {
- // email es inválido; muestre la razones
- foreach ($validator->getMessages() as $messageId => $message) {
- echo "Falla de validación '$messageId': $message\n";
- }
- }
- ]]></programlisting>
- </para>
- </sect2>
- <sect2 id="zend.validate.introduction.messages">
- <title>Personalizar los mensajes</title>
- <para>
- Para validar las clases se proporciona un método <code>setMessage()</code>
- con el que se puede especificar el formato de un mensaje devuelto por
- <code>getMessages()</code> en caso de fallo de validación.
- El primer argumento de este método es un string que contiene el mensaje
- de error. Usted puede incluir tokens en este array que serán sustituidos
- con datos relevantes al validador. El token <code>%value%</code> es aceptado
- por todos los validadores, que es sustituido por el valor que pasó a
- <code>isValid()</code>. Cada clase de validación, puede dar apoyo a otros
- tokens en base a cada caso. Por ejemplo, <code>%max%</code> es un token
- apoyado por <classname>Zend_Validate_LessThan</classname>.
- El método <code>getMessageVariables()</code> devuelve un array de tokens
- variables aceptados por el validador.
- </para>
- <para>
- El segundo argumento opcional es un string que identifica la plantilla
- de mensajes que se establecerá en caso del fracaso de la validación,
- lo que es útil cuando una clase de validación define más de una causa para
- el fallo.
- Si omite el segundo argumento, <code>setMessage()</code> asume que el
- mensaje que especifique debe ser utilizado por la plantilla del
- primer mensaje que declaró en la clase de validación.
- Muchas clases de validación sólo definen una plantilla de mensaje de
- error, así que no hay necesidad de especificar el cambio de plantilla
- de mensaje.
- </para>
- <para>
- <programlisting role="php"><![CDATA[
- $validator = new Zend_Validate_StringLength(8);
- $validator->setMessage(
- 'El string \'%value%\' es muy corto; debe tener al menos %min% ' .
- 'caracteres',
- Zend_Validate_StringLength::TOO_SHORT);
- if (!$validator->isValid('word')) {
- $messages = $validator->getMessages();
- echo current($messages);
- // "El string 'word' es muy corto; debe tener al menos 8 caracteres"
- }
- ]]></programlisting>
- </para>
- <para>
- Puede establecer varios mensajes usando el método <code>setMessages()</code>.
- Su argumento es un array que contiene pares de clave/mensaje.
- <programlisting role="php"><![CDATA[
- $validator = new Zend_Validate_StringLength(8, 12);
- $validator->setMessages( array(
- Zend_Validate_StringLength::TOO_SHORT =>
- 'El string \'%value%\' es muy corto',
- Zend_Validate_StringLength::TOO_LONG =>
- 'El string \'%value%\' es muy largo'
- ));
- ]]></programlisting>
- </para>
- <para>
- Incluso, si su aplicación requiere una mayor flexibilidad para informar
- los fallos de validación, puede acceder a las propiedades por el
- mismo nombre, tal como los tokens de mensajes apoyados por una determinada
- clase de validación.
- La propiedad <code>value</code> siempre está disponible en un validador;
- es el valor que especificó en el argumento de <code>isValid()</code>.
- En cada clase de validación se puede dar apoyo a otras propiedades
- basándose en el esquema de caso por caso.
- <programlisting role="php"><![CDATA[
- $validator = new Zend_Validate_StringLength(8, 12);
- if (!validator->isValid('word')) {
- echo 'Palabra fallada: '
- . $validator->value
- . '; su longitud no está entre '
- . $validator->min
- . ' y '
- . $validator->max
- . "\n";
- }
- ]]></programlisting>
- </para>
- </sect2>
- <sect2 id="zend.validate.introduction.static">
- <title>Utilizando el método estático <code>is()</code> </title>
- <para>
- Si es inconveniente cargar una clase de validación y crear una
- instancia del validador, puede usar el método estático
- <classname>Zend_Validate::is()</classname> como un estilo alternativo de invocación.
- El primer argumento de este método es el valor de una entrada de datos
- que usted pasaría al método <code>isValid()</code>.
- El segundo argumento es un string, que corresponde al nombre base
- de la clase de validación, relativo al nombre de espacio <classname>Zend_Validate</classname>.
- El método <code>is()</code> carga automáticamente la clase, crea una
- instancia y aplica el método <code>isValid()</code> a la entrada de datos.
- <programlisting role="php"><![CDATA[
- if (Zend_Validate::is($email, 'EmailAddress')) {
- // Si, el email parece ser válido
- }
- ]]></programlisting>
- </para>
- <para>
- Si el validador lo necesita, también puede pasar un array de constructores de argumentos.
- <programlisting role="php"><![CDATA[
- if (Zend_Validate::is($value, 'Between', array(1, 12))) {
- // Si, $value está entre 1 y 12
- }
- ]]></programlisting>
- </para>
- <para>
- El método <code>is()</code> devuelve un valor booleano, lo mismo que
- el método <code>isValid()</code>. Cuando se utiliza el método estático
- <code>is()</code>, no están disponibles los mensajes de fracaso de
- validación.
- </para>
- <para>
- El uso estático puede ser conveniente para invocar un validador ad-hoc
- (hecho especialmente), pero si tiene la necesidad de ejecutar el validador para múltiples
- entradas, es más eficiente usar métodos no estáticos, creando una
- instancia del objeto validador y llamando a su método <code>isValid()</code>.
- </para>
- <para>
- También la clase <classname>Zend_Filter_Input</classname> le permite crear
- ejemplos y ejecutar múltiples filtros y clases de validadores por
- demanda, para procesar juegos de datos de entrada. Ver
- <xref linkend="zend.filter.input" />.
- </para>
- </sect2>
- <sect2 id="zend.validate.introduction.translation">
- <title>Translating messages</title>
- <para>
- Validate classes provide a <code>setTranslator()</code> method with
- which you can specify a instance of <classname>Zend_Translate</classname> which
- will translate the messages in case of a validation failure. The
- <code>getTranslator()</code> method returns the set translator instance.
- </para>
- <programlisting role="php"><![CDATA[
- $validator = new Zend_Validate_StringLength(8, 12);
- $translate = new Zend_Translate(
- 'array',
- array(Zend_Validate_StringLength::TOO_SHORT => 'Translated \'%value%\''),
- 'en'
- );
- $validator->setTranslator($translate);
- ]]></programlisting>
- <para>
- With the static <code>setDefaultTranslator()</code> method you can set
- a instance of <classname>Zend_Translate</classname> which will be used for all
- validation classes, and can be retrieved with <code>getDefaultTranslator()</code>.
- This prevents you from setting a translator manually for all validator classes,
- and simplifies your code.
- </para>
- <programlisting role="php"><![CDATA[
- $translate = new Zend_Translate(
- 'array',
- array(Zend_Validate_StringLength::TOO_SHORT => 'Translated \'%value%\''),
- 'en'
- );
- Zend_Validate::setDefaultTranslator($translate);
- ]]></programlisting>
- <note>
- <para>
- When you have set an application wide locale within your registry, then this
- locale will be used as default translator.
- </para>
- </note>
- <para>
- Sometimes it is necessary to disable the translator within a validator.
- To archive this you can use the <code>setDisableTranslator()</code> method,
- which accepts a boolean parameter, and <code>translatorIsDisabled()</code>
- to get the set value.
- </para>
- <programlisting role="php"><![CDATA[
- $validator = new Zend_Validate_StringLength(8, 12);
- if (!$validator->isTranslatorDisabled()) {
- $validator->setDisableTranslator();
- }
- ]]></programlisting>
- <para>
- It is also possible to use a translator instead of setting own messages with
- <code>setMessage()</code>. But doing so, you should keep in mind, that the
- translator works also on messages you set your own.
- </para>
- </sect2>
- </sect1>
- <!--
- vim:se ts=4 sw=4 et:
- -->
|