Introducción a Zend Framework

 Aprendiendo Zend Framework

Apéndice

 Referencia de Zend Framework


  • Zend_Gdata
  • Zend_Http
  • Zend_InfoCard
  • Zend_Json
  • Zend_Layout
  • Zend_Ldap
  • Zend_Loader
  • Zend_Locale
  • Zend_Log
  • Zend_Mail
  • Zend_Markup
  • Zend_Measure
  • Zend_Memory
  • Zend_Mime
  • Zend_Navigation
  • Zend_Oauth
  • Zend_OpenId
  • Zend_Paginator
  • Zend_Pdf
  • Zend_ProgressBar
  • Zend_Queue
  • Zend_Reflection
  • Zend_Registry
  • Zend_Rest

  • Zend_Search_Lucene
  • Zend_Serializer
  • Zend_Server
  • Zend_Service
  • Zend_Session
  • Zend_Soap
  • Zend_Tag
  • Zend_Test
  • Zend_Text
  • Zend_TimeSync
  • Zend_Tool
  • Zend_Tool_Framework
  • Zend_Tool_Project
  • Zend_Translate
  • Zend_Uri
  • Zend_Validate
  • Zend_Version
  • Zend_View
  • Zend_Wildfire
  • Zend_XmlRpc
  • ZendX_Console_Process_Unix
  • ZendX_JQuery
  • Traducción al 26.9% - Actualizado el 2011-11-16 - Revisión 24249 - Versión ZF 1.11.x

    Capítulo 75. Zend_Validate

    Tabla de contenidos

    75.1. Introducción
    75.1.1. ¿Qué es un validador?
    75.1.2. Uso básico de validadores
    75.1.3. Personalizar los mensajes
    75.1.4. Utilizando el método estático is()
    75.1.4.1. Namespaces
    75.1.5. Translating messages
    75.2. Clases de Validación Estándar
    75.2.1. Alnum
    75.2.2. Alpha
    75.2.3. Barcode
    75.2.3.1. Supported options for Zend_Validate_Barcode
    75.2.3.2. Basic usage
    75.2.3.3. Optional checksum
    75.2.3.4. Writing custom adapters
    75.2.4. Between
    75.2.5. Callback
    75.2.5.1. Supported options for Zend_Validate_Callback
    75.2.5.2. Basic usage
    75.2.5.3. Usage with closures
    75.2.5.4. Usage with class-based callbacks
    75.2.5.5. Adding options
    75.2.6. CreditCard
    75.2.6.1. Supported options for Zend_Validate_CreditCard
    75.2.6.2. Basic usage
    75.2.6.3. Accepting defined credit cards
    75.2.6.4. Validation by using foreign APIs
    75.2.7. Ccnum
    75.2.8. Date
    75.2.9. Db_RecordExists and Db_NoRecordExists
    75.2.9.1. Supported options for Zend_Validate_Db_*
    75.2.9.2. Basic usage
    75.2.9.3. Excluding records
    75.2.9.4. Database Adapters
    75.2.9.5. Database Schemas
    75.2.10. Digits
    75.2.11. Dirección de Email
    75.2.11.1. Utilización básica
    75.2.11.2. >Partes locales complejas
    75.2.11.3. Complex local parts
    75.2.11.4. Validating only the local part
    75.2.11.5. Validating different types of hostnames
    75.2.11.6. Verificar si el nombre de host realmente acepta email
    75.2.11.7. Validating International Domains Names
    75.2.11.8. Validación de dominios de nivel superior
    75.2.11.9. Setting messages
    75.2.12. Float
    75.2.13. GreaterThan
    75.2.14. Hex
    75.2.15. Hostname (Nombre de Host)
    75.2.16. Iban
    75.2.17. InArray
    75.2.18. Identical
    75.2.18.1. Supported options for Zend_Validate_Identical
    75.2.18.2. Basic usage
    75.2.18.3. Identical objects
    75.2.18.4. Form elements
    75.2.18.5. Strict validation
    75.2.18.6. Configuration
    75.2.19. InArray
    75.2.19.1. Supported options for Zend_Validate_InArray
    75.2.19.2. Simple array validation
    75.2.19.3. Strict array validation
    75.2.19.4. Recursive array validation
    75.2.20. Int
    75.2.21. Ip
    75.2.21.1. Supported options for Zend_Validate_Ip
    75.2.21.2. Basic usage
    75.2.21.3. Validate IPv4 or IPV6 alone
    75.2.22. Isbn
    75.2.22.1. Supported options for Zend_Validate_Isbn
    75.2.22.2. Basic usage
    75.2.22.3. Setting an explicit ISBN validation type
    75.2.22.4. Specifying a separator restriction
    75.2.23. LessThan
    75.2.24. NotEmpty
    75.2.24.1. Supported options for Zend_Validate_NotEmpty
    75.2.24.2. Default behaviour for Zend_Validate_NotEmpty
    75.2.24.3. Changing behaviour for Zend_Validate_NotEmpty
    75.2.25. PostCode
    75.2.25.1. Constructor options
    75.2.25.2. Supported options for Zend_Validate_PostCode
    75.2.26. Regex
    75.2.27. Sitemap Validators
    75.2.27.1. Sitemap_Changefreq
    75.2.27.2. Sitemap_Lastmod
    75.2.27.3. Sitemap_Loc
    75.2.27.4. Sitemap_Priority
    75.2.27.5. Supported options for Zend_Validate_Sitemap_*
    75.2.28. StringLength
    75.3. Cadenas de Validadores
    75.4. Escribiendo Validadores
    75.5. Validation Messages
    75.5.1. Using pre-translated validation messages
    75.5.2. Limit the size of a validation message

    75.1. Introducción

    Cuando se necesita validar algún tipo de dato, el componente Zend_Validate 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.

    75.1.1. ¿Qué es un validador?

    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.

    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.

    75.1.2. Uso básico de validadores

    Habiendo definido la validación de esta manera, Zend Framework nos proporciona el fundamento para Zend_Validate_Interface que define dos métodos, isValid() y getMessages() . El método isValid() realiza la validación del valor, devolviendo TRUE si y sólo si el valor pasa contra el criterio de validación.

    Si isValid() devuelve FALSE , la función getMessages() 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 constante que hace corresponder a cada identificador con una causa del fallo de validación.

    [Nota] Nota

    El método getMessages() devuelve información del fracaso de la validación sólo para la llamada más reciente a isValid() . Cada llamada a isValid() borra los mensajes y errores causados por una llamada anterior isValid() , porque es probable que cada llamada a isValid() se refiera al valor de una entrada diferente.

    El siguiente ejemplo ilustra la validación de una dirección de e-mail:

    $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";
        }
    }

    75.1.3. Personalizar los mensajes

    Para validar las clases se proporciona un método setMessage() con el que se puede especificar el formato de un mensaje devuelto por getMessages() 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 %value% es aceptado por todos los validadores, que es sustituido por el valor que pasó a isValid() . Cada clase de validación, puede dar apoyo a otros tokens en base a cada caso. Por ejemplo, %max% es un token apoyado por Zend_Validate_LessThan . El método getMessageVariables() devuelve un array de tokens variables aceptados por el validador.

    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, setMessage() 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.

    $validator = new Zend_Validate_StringLength(array('min' => 8'max' => 12));

    $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"
    }

    Puede establecer varios mensajes usando el método setMessages() . Su argumento es un array que contiene pares de clave/mensaje.

    $validator = new Zend_Validate_StringLength(array('min' => 8'max' => 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'
    ));

    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 value siempre está disponible en un validador; es el valor que especificó en el argumento de isValid() . En cada clase de validación se puede dar apoyo a otras propiedades basándose en el esquema de caso por caso.

    $validator = new Zend_Validate_StringLength(812);

    if (!
    validator->isValid('word')) {
        echo 
    'Palabra fallada: '
            
    $validator->value
            
    '; su longitud no está entre '
            
    $validator->min
            
    ' y '
            
    $validator->max
            
    "\n";
    }

    75.1.4. Utilizando el método estático is()

    Si es inconveniente cargar una clase de validación y crear una instancia del validador, puede usar el método estático Zend_Validate::is() 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 isValid() . El segundo argumento es un string, que corresponde al nombre base de la clase de validación, relativo al nombre de espacio Zend_Validate . El método is() carga automáticamente la clase, crea una instancia y aplica el método isValid() a la entrada de datos.

    if (Zend_Validate::is($email'EmailAddress')) {
        
    // Si, el email parece ser válido
    }

    Si el validador lo necesita, también puede pasar un array de constructores de argumentos.

    if (Zend_Validate::is($value'Between', array('min' => 1'max' => 12))) {
        
    // Si, $value está entre 1 y 12
    }

    El método is() devuelve un valor booleano, lo mismo que el método isValid() . Cuando se utiliza el método estático is() , no están disponibles los mensajes de fracaso de validación.

    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 isValid() .

    También la clase Zend_Filter_Input le permite crear ejemplos y ejecutar múltiples filtros y clases de validadores por demanda, para procesar juegos de datos de entrada. Ver Sección 34.5, “Zend_Filter_Input” .

    75.1.4.1. Namespaces

    When working with self defined validators you can give a forth parameter to Zend_Validate::is() which is the namespace where your validator can be found.

    if (Zend_Validate::is($value'MyValidator', array('min' => 1'max' => 12),
                          array(
    'FirstNamespace''SecondNamespace')) {
        
    // Yes, $value is ok
    }

    Zend_Validate allows also to set namespaces as default. This means that you can set them once in your bootstrap and have not to give them again for each call of Zend_Validate::is() . The following code snippet is identical to the above one.

    Zend_Validate::setDefaultNamespaces(array('FirstNamespace''SecondNamespace'));
    if (
    Zend_Validate::is($value'MyValidator', array('min' => 1'max' => 12)) {
        
    // Yes, $value is ok
    }

    if (
    Zend_Validate::is($value'OtherValidator', array('min' => 1'max' => 12)) {
        
    // Yes, $value is ok
    }

    For your convinience there are following methods which allow the handling of namespaces:

    • Zend_Validate::getDefaultNamespaces() : Returns all set default namespaces as array.

    • Zend_Validate::setDefaultNamespaces() : Sets new default namespaces and overrides any previous set. It accepts either a string for a single namespace of an array for multiple namespaces.

    • Zend_Validate::addDefaultNamespaces() : Adds additional namespaces to already set ones. It accepts either a string for a single namespace of an array for multiple namespaces.

    • Zend_Validate::hasDefaultNamespaces() : Returns TRUE when one or more default namespaces are set, and FALSE when no default namespaces are set.

    75.1.5. Translating messages

    Validate classes provide a setTranslator() method with which you can specify a instance of Zend_Translate which will translate the messages in case of a validation failure. The getTranslator() method returns the set translator instance.

    $validator = new Zend_Validate_StringLength(array('min' => 8'max' => 12));
    $translate = new Zend_Translate(
        
    'array',
        array(
    Zend_Validate_StringLength::TOO_SHORT => 'Translated \'%value%\''),
        
    'en'
    );

    $validator->setTranslator($translate);

    With the static setDefaultTranslator() method you can set a instance of Zend_Translate which will be used for all validation classes, and can be retrieved with getDefaultTranslator() . This prevents you from setting a translator manually for all validator classes, and simplifies your code.

    $translate = new Zend_Translate(
        
    'array',
        array(
    Zend_Validate_StringLength::TOO_SHORT => 'Translated \'%value%\''),
        
    'en'
    );
    Zend_Validate::setDefaultTranslator($translate);
    [Nota] Nota

    When you have set an application wide locale within your registry, then this locale will be used as default translator.

    Sometimes it is necessary to disable the translator within a validator. To archive this you can use the setDisableTranslator() method, which accepts a boolean parameter, and translatorIsDisabled() to get the set value.

    $validator = new Zend_Validate_StringLength(array('min' => 8'max' => 12));
    if (!
    $validator->isTranslatorDisabled()) {
        
    $validator->setDisableTranslator();
    }

    It is also possible to use a translator instead of setting own messages with setMessage() . But doing so, you should keep in mind, that the translator works also on messages you set your own.

    digg delicious meneame google twitter technorati facebook

    Comentarios

    Loading...