我在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为空,它就会忽略规则。
必须有一些显而易见的东西我不明白,请帮助我!
答案 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类。