TigerZF
🌐Español

76.5. Mensajes de validación

Cada validador basado en Zend_Validate proporciona uno o varios mensajes en caso de fallo de validación. Puede usar esta información para establecer sus propios mensajes, o para traducir los mensajes existentes que un validador podría devolver a algo diferente.

Estos mensajes de validación son constantes que se pueden encontrar en la parte superior de cada clase de validador. Veamos Zend_Validate_GreaterThan como ejemplo descriptivo:

protected $_messageTemplates = array(
    self::NOT_GREATER => "'%value%' is not greater than '%min%'",
);

Como puede ver, la constante self::NOT_GREATER hace referencia al fallo y se usa como clave, y el mensaje en sí se usa como valor del array de mensajes.

Puede recuperar todas las plantillas de mensajes de un validador usando el método getMessageTemplates(). Este devuelve el array anterior que contiene todos los mensajes que un validador podría devolver en caso de fallo de validación.

$validator = new Zend_Validate_GreaterThan();
$messages  = $validator->getMessageTemplates();

Usando el método setMessage() puede establecer otro mensaje que se devolverá en caso del fallo especificado.

$validator = new Zend_Validate_GreaterThan();
$validator->setMessage(
    'Please enter a lower value',
    Zend_Validate_GreaterThan::NOT_GREATER
);

El segundo parámetro define el fallo que se sobrescribirá. Cuando se omite este parámetro, el mensaje indicado se establecerá para todos los fallos posibles de este validador.

76.5.1. Uso de mensajes de validación pretraducidos

Zend Framework se distribuye con más de 45 validadores diferentes con más de 200 mensajes de fallo. Traducir todos estos mensajes puede ser una tarea tediosa. Pero para su comodidad, Zend Framework incluye mensajes de validación ya pretraducidos. Puede encontrarlos en la ruta /resources/languages de su instalación de Zend Framework.

[Note] Ruta utilizada

Los archivos de recursos están fuera de la ruta de la biblioteca porque todas sus traducciones también deberían estar fuera de esta ruta.

Así que, para traducir todos los mensajes de validación al alemán, por ejemplo, todo lo que tiene que hacer es adjuntar un traductor a Zend_Validate usando estos archivos de recursos.

$translator = new Zend_Translate(
    array(
        'adapter' => 'array',
        'content' => '/resources/languages',
        'locale'  => $language,
        'scan' => Zend_Translate::LOCALE_DIRECTORY
    )
);
Zend_Validate_Abstract::setDefaultTranslator($translator);
[Note] Adaptador de traducción utilizado

Como adaptador de traducción, Zend Framework eligió el adaptador de array. Es sencillo de editar y se crea muy rápido.

[Note] Idiomas soportados

Esta característica es muy reciente, por lo que la cantidad de idiomas soportados puede no estar completa. Se añadirán nuevos idiomas con cada versión. Además, siéntase libre de usar los archivos de recursos existentes para crear sus propias traducciones.

También podría usar estos archivos de recursos para reescribir traducciones existentes. Así no necesita crear estos archivos manualmente usted mismo.

76.5.2. Limitar el tamaño de un mensaje de validación

A veces es necesario limitar el tamaño máximo que puede tener un mensaje de validación. Por ejemplo, cuando su vista permite un tamaño máximo de 100 caracteres para mostrar en una línea. Para simplificar el uso, Zend_Validate es capaz de limitar automáticamente el tamaño máximo devuelto de un mensaje de validación.

Para obtener el tamaño real establecido use Zend_Validate::getMessageLength(). Si es -1, entonces el mensaje devuelto no se truncará. Este es el comportamiento por defecto.

Para limitar el tamaño del mensaje devuelto use Zend_Validate::setMessageLength(). Establézcalo con cualquier tamaño entero que necesite. Cuando el mensaje devuelto exceda el tamaño establecido, entonces el mensaje se truncará y se añadirá la cadena '...' en lugar de el resto del mensaje.

Zend_Validate::setMessageLength(100);
[Note] ¿Dónde se usa este parámetro?

El tamaño de mensaje establecido se usa para todos los validadores, incluso para los definidos por el propio usuario, siempre que extiendan Zend_Validate_Abstract.