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