Codeigniter:Form_validation始终返回FALSE


Codeigniter: Form_validation always return FALSE

我正在使用codeigniter,并尝试使用自定义回调检查函数验证我的表单。但我真的很困惑,因为验证总是返回FALSE。

这是表单输入:

echo form_input(array(
       'id' => 'aff_hos_0', 
       'name' => 'aff_hos[]', 
       'value' => '',
       'class' => 'form-control auto_form',
       'placeholder' => 'Masukkan Nama Rumah Sakit',
       'style' => 'width:100%'));

以下是按表单POST的数据:

Array
(
    [0] => RS Pantai Indah Kapuk, Cengkareng, Jakarta, Jakarta
    [1] => RS Siloam Kebonn Jeruk, Kb. Jeruk, Jakarta, Jakarta
)

这是我设置form_validation:的时候

$this->form_validation->set_rules('aff_hos[]', 'Afiliasi Rumah Sakit ', 'callback_check_chosen_filled[Afiliasi Rumah Sakit]');

这是callback_check函数,我试图通过这个回调来实现的是检查输入数组(aff_hos[])是否为空:

function check_chosen_filled($post_array, $field) {
    if (!isset($post_array) || (!is_array($post_array) && !count($post_array) > 0)) {
        $this->form_validation->set_message('check_chosen_filled', $field . ' wajib diisi'.print_r($post_array));
        return FALSE;
    } else {
        foreach ($post_array as $row):
            if (strlen($row) == 0) {
                $this->form_validation->set_message('check_chosen_filled', $field . ' wajib diisi');
                return FALSE;
            }
        endforeach;
    }
    return TRUE;
}

问题是您在回调中将第一个参数作为数组。实际上,它不是数组。CI验证库迭代每个数组值以调用自定义回调。这就是为什么你的代码应该是这样的。

function check_chosen_filled($value, $field) {
    if (empty($value)) {
        // set validation error msg
        return FALSE;
    }
    return TRUE;
}

希望它对你有用。