Gah ..我已经花了很长时间,但我相信我已经找到了问题。
基本上我有一个隐藏字段,当用户点击图像时会填充该字段。
要求用户单击图像,但我不希望使用通用表单错误消息进行CI表单验证类的“必需”检查。
因此,我在扩展表单验证类中快速创建了一个image_required函数,并设置了一条规则,使此规则应用于隐藏字段。
function image_required($str)
{
$CI =& get_instance();
$CI->form_validation->set_message('image_required','Please click the image above.');
if($str != '')
{
return TRUE;
}
else
{
return FALSE;
}
}
如果隐藏字段为空,则不会调用错误。
我现在开始相信这是因为CI说这个字段是空的但它不是“必需的”,因此我们将忽略该字段的所有其他验证规则。这是对的吗?
如果是这样,我怎么能设置要求设置此字段但是有自定义错误消息?
刘海头
由于
答案 0 :(得分:2)
如果您查看'_execute'例程(system / libraries / Form_validation.php)的源代码(v2.1.3),您将在第486行看到
// If the field is blank, but NOT required, no further tests are necessary
所以你是对的,需要它,然后才会处理你的规则。
为了修复它以便你可以拥有一个仍然处理规则的非必需空白字段,你应该通过在application / libraries文件夹中创建一个名为'MY_Form_validation.php'的文件来覆盖'_execute'方法(我认为,您可能需要确切地检查如何扩展现有库)然后复制“_execute”方法并更改代码以继续非必需但空白的条目。
答案 1 :(得分:0)
我确实喜欢CI,但是我不得不说这不允许所需的灵活性。字段不能为空,但不是必需的,这是完全合理的。与之类似,您不会强制执行“用户必须输入值”,但是他们不能提交空白。我认为有人在EMPTY和REQUIRED之间感到困惑。
1)必需:用户必须在字段中输入一个值,并且该值不能为空(即“”) 2)空:用户不必输入值,但是如果输入,则不能为空。这与REQUIRED不同。看起来我将再次使用回调。
REQUIRED包含两个逻辑步骤(1->必须输入一个值,并且2->不能为空),这两个步骤应在逻辑上分开以允许/或。
在约束条件下,它要么是必需的,要么不是NULL。或不需要,不为空。