我在空字段上的回调有问题。
出于某种原因,我需要将字段的值与其他一些参数进行比较,并且只有在满足其他一些条件时才将其设为“必需”,从回调函数中购买检查它。
不幸的是,如果字段为空,则不会调用回调函数。
你知道如何克服这个问题吗?
我在空字段上的回调有问题。
出于某种原因,我需要将字段的值与其他一些参数进行比较,并且只有在满足其他一些条件时才将其设为“必需”,从回调函数中购买检查它。
不幸的是,如果字段为空,则不会调用回调函数。
你知道如何克服这个问题吗?
这个“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)
{
...
}
}
只需将整个函数复制到新文件并注释掉上述两个返回即可。
你可以像这样定义验证规则
你可以设置一个条件
if($this->input->post('first_field_name')){
$this->form_validation->set_rules('2ndfield','Field Name','required|callback_myfunction');
}