【问题标题】:Codeigniter form validation, custom check doesn't work if the field is not requiredCodeigniter 表单验证,如果不需要该字段,则自定义检查不起作用
【发布时间】:2013-02-13 08:08:00
【问题描述】:

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

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

刘海

谢谢

【问题讨论】:

  • 这是一个库还是一个助手?,你如何在你的验证集规则中调用?

标签: codeigniter validation


【解决方案1】:

如果您查看“_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”方法并更改代码以继续处理非必需但空白的条目。

【讨论】:

  • 抱歉,我刚刚注意到您已经扩展了课程。只需更改 _execute 方法即可。
  • 完美。谢谢史蒂夫。花了我一段时间,但是嘿..我到了那里:P
【解决方案2】:

我确实喜欢 CI,但我不得不说这不允许所需的灵活性。有一个不能为空但不是必需的字段是完全合理的。如,您不会强制“用户必须输入一个值”,但他们不能提交空白。我认为有人对 EMPTY 和 REQUIRED 感到困惑。

1) 要求:用户必须在字段中输入一个值,并且不能为空(即 '') 2) EMPTY:用户不必输入值,但如果输入,则不能为空。这与 REQUIRED 不同...看起来我将再次使用回调。

REQUIRED 包含两个逻辑步骤(1-> 必须输入一个值,以及 2-> 不能为空)这两个步骤应在逻辑上分开以允许 / 或。

在约束条件下,它可以是 REQUIRED,NOT NULL。或者不需要,不为空。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-09
    • 2022-01-17
    • 1970-01-01
    • 2019-05-18
    • 1970-01-01
    • 2018-09-11
    • 1970-01-01
    相关资源
    最近更新 更多