一个验证函数用于多个输入


One validation function for multiple inputs

我正在使用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. .

我已经为三个字段创建了一个回调函数,只是为了防止重复相同的函数,这些函数必须检查/工作相同......不幸的是,无法访问与每个输入对应的错误。

更改

$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 中