Messages de validation

Chaque validateur basé sur Zend_Validate propose un ou plusieurs messages dans le cas d'un échec. Vous pouvez utiliser ces informations pour créer vos propres messages ou pour traduire les messages présents.

Ces messages sont représentés par des constantes se trouvant en haut de chaque classe de validateur. Voyons Zend_Validate_GreaterThan pour un exemple complet:

protected $_messageTemplates = array(
    self::NOT_GREATER => "'%value%' n'est pas plus grande que '%min%'",
);

Comme vous le voyez, la constante self::NOT_GREATER fait référence à un échec et est utilisée comme clé, le message lui-même est utilisé comme valeur dans le tableau des messages.

Vous pouvez récupérer les templates de messages d'un validateur en utilisant la méthode getMessageTemplates(). Elle vous retourne le tableau comme vu ci-dessus qui contient tous les messages que le validateur pourrait retourner en cas d'échec de validation.

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

La méthode setMessage() permet de modifier un message unique correspondant à un cas particulier d'échec de validation.

$validator = new Zend_Validate_GreaterThan();
$validator->setMessage('Entrez une valeur plus petite', Zend_Validate_GreaterThan::NOT_GREATER);

Le deuxième paramètre indique le cas d'échec à surcharger. Lorsque vous omettez ce paramètre, alors le message précisé sera affecté comme message pour tous les cas d'échec possibles du validateur.

Utiliser les messages de validations pré-traduits

Zend Framework est livré avec plus de 45 validateurs différents et plus de 200 messages d'échecs. Cela peut-être pénible de tous les traduire. Pour votre convenance, Zend Framework est livré avec des messages d'échec pré-traduits. Vous les trouverez dans /resources/languages de votre installation de Zend Framework.

Chemin utilisé

Les fichiers de ressources sont en dehors du dossier library car les traductions sont sensées être en dehors de ce chemin.

Donc pour traduire les messages de validation en français par exemple, tout ce qu'il y a à faire est d'attacher un objet de traduction à Zend_Validate en utilisant les fichiers de ressources (pré-traductions).

$translator = new Zend_Translate(
    array(
        'adapter' => 'array',
        'content' => '/resources/languages',
        'locale'  => $language,
        'scan' => Zend_Translate::LOCALE_DIRECTORY
    )
);
Zend_Validate_Abstract::setDefaultTranslator($translator);

Adaptateur de traduction utilisé

L'adaptateur array a été utilisé, ceci pour permettre une modification simple des messages pré-traduits.

Langues supportées

Cette caractéristique de pré-traduction est jeune, donc le nombre de langues supportées peut ne pas être complet. De nouvelles langues seront ajoutées dans les sorties futures.

Vous pouvez aussi partir de ces fichiers pré-traduits pour créer vos propres traductions, par exemple.

Limiter la taille d'un message de validation

Il peut être nécessaire parfois de limiter la taille en caractères des messages d'erreur retournés. par exemple si une vue n'autorise que 100 caractères par ligne. Zend_Validate propose une telle option.

La taille actuelle est Zend_Validate::getMessageLength(). -1 signifie que le message ne sera pas tronqué et entièrement retourné, c'est le comportement par défaut.

Pour limiter la taille, utilisez Zend_Validate::setMessageLength(). Lorsque la taille excède cette valeur, le message sera alors tronqué et suivi de '...'.

Zend_Validate::setMessageLength(100);

Où ce paramètre est-il utilisé ?

La taille des messages affecte aussi les messages personnalisés enregistrés, dès que le validateur considéré étend Zend_Validate_Abstract.