2012-05-06 4 views
1

я использую функцию обратного вызова проверки формы CodeIgniter, вот это:Одна функции проверки для нескольких входов

function _validate_rate($input, $field) 
{ 

    if (!in_array($field, array("water", "earth", "fire"))) 
    { 
     return FALSE; 
    } 

    $min = (int) $this->input->post($field . '_max'); 
    if ($min > 0 AND $min < $input) 
    { 
     $this->form_validation->set_message($field . '_min', sprintf($this->lang->line('dev_s_invalid_rate'), strtolower($field))); 
     return FALSE; 
    } 
    return TRUE; 
} 

.. Я использую выше функции для трех форм входов:

$form_rules = array(
    'water_min' => array (
     'field' => substr($this->lang->line('dev_field_water'), 0, -1), 
     'rules' => 'trim|xss_clean|max_length[4]|numeric|callback__validate_rate[water]' 
    ), 
    'earth_min' => array (
     'field' => substr($this->lang->line('dev_field_earth'), 0, -1), 
     'rules' => 'trim|xss_clean|max_length[4]|numeric|callback__validate_rate[earth]' 
    ), 
    'fire_min' => array (
     'field' => substr($this->lang->line('dev_field_fire'), 0, -1), 
     'rules' => 'trim|xss_clean|max_length[4]|numeric|callback__validate_rate[fire]' 
    ) 
); 
foreach($form_rules as $input => $data) 
{ 
    $this->form_validation->set_rules($input, $data['field'], $data['rules']); 
} 

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

$this->form_validation->set_message($field . '_min', sprintf($this->lang->line('dev_s_invalid_rate'), strtolower($field))); 

(в функции обратного вызова).

Итак: он должен установить сообщение об ошибке, соответствующее данным $field, поэтому, когда $field является water, он должен установить сообщение об ошибке для water_min (как это проверка правило имя поля) .. но потом я получение следующего сообщения:

Unable to access an error message corresponding to your field name..

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

ответ

1

изменение

$this->form_validation->set_message($field . '_min', sprintf($this->lang->line('dev_s_invalid_rate'), strtolower($field))); 

к

$this->form_validation->set_message(_validate_rate, sprintf($this->lang->line('dev_s_invalid_rate'), strtolower($field))); 

Сообщение об ошибке соответствует функции, а не поле. Таким образом, ваша функция может быть в основном использована для нескольких полей. В сообщении об ошибке можно было бы написать:

'The %s field is not correct' 

и он будет вставить имя поля в% s