Codeigniter表单验证,如果不需要该字段,则自定义检查不起作用

时间:2013-02-27 13:34:44

标签: codeigniter validation

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说这个字段是空的但它不是“必需的”,因此我们将忽略该字段的所有其他验证规则。这是对的吗?

如果是这样,我怎么能设置要求设置此字段但是有自定义错误消息?

刘海头

由于

2 个答案:

答案 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。或不需要,不为空。