代码点火器个人表单验证规则不起作用

时间:2014-06-03 07:35:18

标签: codeigniter validation

我在Code Igniter上遇到了这个问题,其中一个库包含我自己的验证规则(MY_Form_validation)。 我想检查一个字段是否填充,只有填充另一个字段。仅当填充了field1时才需要Field2。 这是控制器上的线条:

for($j = 1 ; $j < $i ; $j++) {
    $this->form_validation->set_rules('day' . $j, 'Jour ' . $j, 'dateIsPosteriorToField[start_date]|trim|xss_clean');
    $this->form_validation->set_rules('alert' . $j, 'Alerte jour ' . $j, 'conditionalRequired[day' . $j . ']|trim|xss_clean');
}

(我有多个这样的字段,所以我用循环得到它们)

我的表单验证:

function conditionalRequired($valueTocheck, $conditionalField)
{
    $this->set_message('conditionalRequired', 'Le champ %s est requis.');
    $conditionalValue = $this->CI->input->post($conditionalField);
    if( ! empty($conditionalValue) && empty($valueTocheck)) {
        return false;
    }
    return true;
}

问题:如果填写了field2,则CI会进入规则并与之匹配。如果field2为空,则CI不会进入规则。我可以看到,通过在规则中转储任何值,如果field2为空,它就会忽略规则。

必须有一些显而易见的东西我不明白,请帮助我!

1 个答案:

答案 0 :(得分:0)

这可能不是您正在寻找的解决方案,但您可以通过执行以下操作来解决您的问题。

for($j = 1 ; $j < $i ; $j++) {
    $this->form_validation->set_rules('day' . $j, 'Jour ' . $j, 'dateIsPosteriorToField[start_date]|trim|xss_clean');
    if ($this->input->post('day' . $j)) {
        $this->form_validation->set_rules('alert' . $j, 'Alerte jour ' . $j, 'required|trim|xss_clean');
    }
}

这样,如果设置了'day' . $j POST,则'alert' . $j被设置为必需。

这样做意味着您不需要扩展form_validation类。