Как настроить пользовательские сообщения об ошибках для каждого поля формы в Codeigniter? - PullRequest
6 голосов
/ 02 февраля 2012

Я пытаюсь настроить форму codeigniter с различными сообщениями об ошибках.

set_message (rule, msg) настраивает сообщение для всей формы.

Мне нужно:

$this->form_validation->set_rules('name', 'First Name', 'required');
$this->form_validation->set_message('name', 'required', 'Enter your Name');    
$this->form_validation->set_rules('second', 'Variables', 'required');
$this->form_validation->set_message('second', 'required', 
                                    'The Variables are required');

Добавление% s в строку сообщения в этом случае не поможет, поскольку сообщения должны быть совершенно разными.

Возможно, я мог бы сделать что-то вроде:

Контроллер

$this->form_validation->set_rules('name', 'Name',
                                  'required|min_length[6]|max_length[12]');
$this->form_validation->set_rules('second', 'Variables',
                                  'required|min_length[3]|max_length[5]');
$this->form_validation->set_message('required', 'required');
$this->form_validation->set_message('min_length', 'short');
$this->form_validation->set_message('max_length', 'long');

вид

switch(form_error('name')) {
    case '<p>required</p>':
        echo 'Enter your Name';
        break;
    case '<p>short</p>':
        echo 'min length 6';
        break;
    case '<p>long</p>':
        echo 'min length 12';
        break;

}

switch(form_error('second')) {
    case '<p>required</p>':
        echo 'The Variables are required';
        break;
    case '<p>short</p>':
        echo 'min length 3';
        break;
    case '<p>long</p>':
        echo 'min length 5';
        break;

}

Но нет ли более разумного способа сделать это?

Ответы [ 4 ]

8 голосов
/ 02 февраля 2012

Я думаю, что разумнее было бы использовать функцию обратного вызова Codeigniter (что-то похожее на приведенное ниже).Следующие работы, но может быть возможно упростить его еще больше.Если ничего другого, это отправная точка.

Создайте две функции обратного вызова (я назвал их custom_required и custom_check_length ) и поместите их в нижней части вашего контроллера(или там, где вы чувствуете необходимость).

private function _custom_required($str, $func) {
        switch($func) {
            case 'name':
                $this->form_validation->set_message('custom_required', 'Enter your name');
                return (trim($str) == '') ? FALSE : TRUE;
                break;
            case 'second':
                $this->form_validation->set_message('custom_required', 'The variables are required');
                return (trim($str) == '') ? FALSE : TRUE;
                break;
        }
    }

и ...

private function _custom_check_length($str, $params) {
        $val = explode(',', $params);

        $min = $val[0];
        $max = $val[1];

        if(strlen($str) <= $max && strlen($str) >= $min) {
            return TRUE;
        } elseif(strlen($str) < $min) {
            $this->form_validation->set_message('custom_check_length', 'Min length ' . $min);
            return FALSE;
        } elseif(strlen($str) > $max) {
            $this->form_validation->set_message('custom_check_length', 'Max length ' . $max);
            return FALSE;
        }
    }

Эти две функции заботятся о set_message аспекте проверки вашей формы.Чтобы установить правила , вам просто нужно вызвать эти две функции, поставив перед именем функции callback_ .

Итак ...

$this->form_validation->set_rules('name', 'Name', 'callback__custom_required[name]|callback__custom_check_length[6,12]');
$this->form_validation->set_rules('second', 'Second', 'callback__custom_required[second]|callback__custom_check_length[3,5]');

Надеюсь, что это как-то поможет !!

5 голосов
/ 01 июня 2016

вы можете установить пользовательскую ошибку, как я упоминал ниже, нет необходимости создавать пользовательскую функцию для этого изменения содержимого сообщения об ошибке.

$validation = array(
    array(
        'field' => 'name',
        'label' => 'NAME', 
        'rules' => 'trim|required', 
        "errors" => array('required' => " Enter your %s. ")
    ),
);
$this->form_validation->set_rules($validation);
        if ($this->form_validation->run()) {}
0 голосов
/ 02 октября 2016

Вы были почти там с вашей первоначальной мыслью.Все, что вам нужно было выполнить проверку после каждой группы set_message () изменений.Я считаю, что этот подход намного проще и быстрее, чем функции обратного вызова, если вы не собираетесь использовать эту точную настройку во многих местах.


    $this->form_validation->set_rules('name', 'First Name', 'required|alpha')
    $this->form_validation->set_message('name', 'required', 'Enter your Name');
    $this->form_validation->set_message('name', 'alpha', 'Numbers in %s?');
    <b>$this->form_validation->run();</b>

    $this->form_validation->set_rules('second', 'Variables', 'required');
    $this->form_validation->set_message('second', 'required', 'Variables required');
    <b>if ($this->form_validation->run()) {</b>
        ...
    <b>}</b>

Этот подход проверки работает на всех версиях Codeigniter.

0 голосов
/ 05 февраля 2015
$this->form_validation->set_rules('name', 'Name', 'callback__custom_required[name]|callback__custom_check_length[6,12]');
$this->form_validation->set_rules('second', 'Second', 'callback__custom_required[second]|callback__custom_check_length[3,5]');**
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...