2

我在空字段上的回调有问题。

出于某种原因,我需要将字段的值与其他一些参数进行比较,并且只有在满足其他一些条件时才将其设为“必需”,从回调函数中购买检查它。

不幸的是,如果字段为空,则不会调用回调函数。

你知道如何克服这个问题吗?

4

2 回答 2

2

这个“bug”实际上是表单验证的一个“特性”。如果输入为空并且未设置所需的规则,则它会跳过所有其他规则(甚至是非回调函数)。即使输入为空白,您也可以扩展(或破解)验证以继续执行所有功能。

system/libraries/Form_validation.php大约第 486 行,您将看到以下注释:

// If the field is blank, but NOT required, no further tests are necessary

return;然后,您将在该评论后不久看到两行带有 a 的行。我的行在第 498 行和第 536 行(评论后大约 12 和 50 行)。如果您注释掉这两行,那么即使输入为空白,验证也将继续通过所有函数。

话虽如此,您可以通过在以下位置创建文件application/libraries/Form_validation.php并覆盖该_execute函数来扩展表单验证:

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

class MY_Form_validation extends CI_Form_validation
{
    protected function _execute($row, $rules, $postdata = NULL, $cycles = 0)
    {
        ...
    }
}

只需将整个函数复制到新文件并注释掉上述两个返回即可。

于 2014-03-17T15:24:46.460 回答
1

你可以像这样定义验证规则

你可以设置一个条件

if($this->input->post('first_field_name')){
    $this->form_validation->set_rules('2ndfield','Field Name','required|callback_myfunction');
}
于 2013-03-21T09:48:55.390 回答