Могут ли ошибки валидации Kohana 3 наследовать? - PullRequest
3 голосов
/ 07 июля 2010

Я создал кучу ошибок в файле под APPPATH/messages/validate.php с кучей распространенных сообщений, таких как ...

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.'
    ) 
);

Это прекрасно работает, когда я получаю ошибки типа $errors = $post->errors('validate').

Есть ли способ использовать эти ошибки как base , и если у меня есть отдельная форма, которая нуждается в большем количестве, я могу использовать отдельный файл только с отличиями в нем, например, он может выглядеть как

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

Очевидно, что любое сообщение об ошибке email будет получено от validate.php (унаследовано), но любая ошибка permissions будет получена из нового файла с определением ошибки для permissions.

Я назвал файл validate.php, потому что поведение наследования, похоже, работает с папкой system, и именно так она называется в SYSPATH/messages/validate.php (см. GitHub ).

Могут ли мои сообщения об ошибках наследоваться от базового файла, или я должен просто скопировать все сообщения об ошибках в форму?

Ответы [ 4 ]

4 голосов
/ 20 августа 2010

распространенные ошибки: 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.'
    )
);

конкретные ошибки: APPPATH / messages / specific.php

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

Кохана использует эту последовательность, чтобы найти сообщение:APPPATH / messages / specific.php, APPPATH / messages / validate.php и SYSPATH / messages / validate.php

print_r(validate->errors('specific'));
3 голосов
/ 07 июля 2010

без "хаков":

    $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');

ваша модель не должна проверять логику вашего бизнеса.

2 голосов
/ 21 июля 2010

Наследование работает автоматически, следуйте этой схеме:

  1. Поиск поля + сообщение об ошибке в указанном файле
  2. Поиск поля + сообщение по умолчанию в заданном файле
  3. Поиск общего сообщения в заданном файле
  4. Поиск общего сообщения в validate файле

Таким образом, если вы перегрузите файл validate и измените сообщения по умолчанию, наследование будет работать как положено.

0 голосов
/ 07 июля 2010

Это хакерство, но оно работает!

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

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

return array_merge($commonErrors, $errors);

По сути, оно автоматически наследует базовые правила для вас!

...