2010-07-07 3 views
3

J'ai créé un tas d'erreurs dans un fichier sous APPPATH/messages/validate.php avec un tas de communs messages tels que ...peuvent les erreurs de validation de Kohana 3 hériter?

return array(
    'not_empty' => ':field must not be empty.', 
    'matches'  => ':field must be the same as :param1', 
    'regex'  => ':field does not match the required format', 
    'exact_length' => ':field must be exactly :param1 characters long', 
    'min_length' => ':field must be at least :param1 characters long', 
    'max_length' => ':field must be less than :param1 characters long', 
    'in_array'  => ':field must be one of the available options', 
    'digit'  => ':field must be a digit', 
    'email'  => 'You must enter a valid email.', 
    'name'   => 'You must enter your name.', 
    'enquiry'  => 'You must enter your enquiry.', 
    'captcha' => array (
     'Captcha::valid' => 'The characters you entered did not match the image. Please try again.', 
     'not_empty' => 'You must enter the characters from the image.' 
    ) 
); 

Cela fonctionne très bien quand je reçois des erreurs comme $errors = $post->errors('validate').

est-il un moyen d'utiliser ces erreurs la base erreurs, et si j'ai un formulaire qui a besoin de plus, je peux utiliser un fichier séparé avec seulement les différences, par exemple, il peut ressembler à

return array(
    'permissions' => 'Please agree to the permissions', 
); 

Alors, évidemment, un message d'erreur email viendra de validate.php (inherited), mais toute erreur permissions viendra du nouveau fichier avec la définition d'erreur pour permissions.

Je l'ai appelé le fichier validate.php car le comportement Hériter semble fonctionner avec le dossier system et qui est ce qu'il est appelé sous SYSPATH/messages/validate.php (voir sur GitHub).

Peut mes messages d'erreur hériter d'un fichier de base, ou devrais-je simplement copier tous les messages d'erreur par formulaire?

Répondre

2

héritage fonctionne automatiquement, suivez ce modèle:

  1. Rechercher un champ + message d'erreur spécifique dans le fichier donné
  2. Rechercher un champ + un message par défaut dans le fichier donné
  3. de recherche pour une message générique dans le fichier donné
  4. Rechercher un message générique validate fichier

Donc, si vous surchargez le fichier validate et de modifier les messages par défaut, alors l'héritage fonctionnera comme prévu.

+0

Hey, merci pour Shadowhand la réponse.Voulez-vous dire "valider" dans le dossier système? Parce que quand j'ai copié ce fichier 'validate' dans le dossier' APPPATH/messages', IIRC, cela n'a pas fonctionné. – alex

+1

Il devrait être placé dans 'APPPATH/messages'. – shadowhand

0

Ceci est hacky, mais ça marche!

$commonErrors = include APPPATH . 'messages/validate.php'; 

$errors = array(
    'permission' => array(
     'not_empty' => 'You must give permission to continue.' 
    ) 
); 

return array_merge($commonErrors, $errors); 

Fondamentalement, il hérite automatiquement des règles de base pour vous!

3

sans "hacks":

$orm->values($form[$this->name])->check(); 

    $not_model_errors = Validate::factory(array())->rule(NULL, 'permissions_rules'); // doesn't matter what args you send here, just meet the vartype 
    // add test error 
    $not_model_errors->error(NULL, 'test_error', array()); 

    $this->template->errors = $orm->validate()->errors('validation') + $not_model_errors->errors('permissions'); 

votre modèle ne doit pas valider votre logique d'entreprise.

4

erreurs courantes: APPPATH/messages/validate.php

return array(
    'email'  => 'You must enter a valid email.', 
    'name'   => 'You must enter your name.', 
    'enquiry'  => 'You must enter your enquiry.', 
    'captcha' => array (
     'Captcha::valid' => 'The characters you entered did not match the image. Please try again.', 
     'not_empty' => 'You must enter the characters from the image.' 
    ) 
); 

erreurs spécifiques: APPPATH/messages/specific.php

return array(
    'permissions' => 'Please agree to the permissions', 
); 

Kohana utilise ces séquences pour trouver le message: AppPath/messages /specific.php, AppPath/messages/validate.php et SYSPATH/messages/validate.php

print_r(validate->errors('specific'));