Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在CodeIgniter 2.2.0中,为什么表单验证程序不调用我对数组输入数据的自定义验证例程?_Php_Codeigniter_Validation_Codeigniter 2_Codeigniter Form Helper - Fatal编程技术网

Php 在CodeIgniter 2.2.0中,为什么表单验证程序不调用我对数组输入数据的自定义验证例程?

Php 在CodeIgniter 2.2.0中,为什么表单验证程序不调用我对数组输入数据的自定义验证例程?,php,codeigniter,validation,codeigniter-2,codeigniter-form-helper,Php,Codeigniter,Validation,Codeigniter 2,Codeigniter Form Helper,情况是这样的:在CodeIgniter 2.2.0中构建项目时,我试图使用自定义数据验证器验证表格表单。表格格式是为了以标准数组格式将POST数据传输到服务器而设置的,我使用的是非零数字键。我的密钥对重要数据进行编码,碰巧在我试图调试的表单上以1开头。我注意到CodeIgniter的Form_验证类在我的数据的第二行和第三行(分别使用键2和键3)调用我的验证器,而不是第一行(使用键1) 为什么会这样?指示您可以使用非数字数组键,因此人们希望非零数字数组键也能工作。经过一些调试,我发现Form_v

情况是这样的:在CodeIgniter 2.2.0中构建项目时,我试图使用自定义数据验证器验证表格表单。表格格式是为了以标准数组格式将POST数据传输到服务器而设置的,我使用的是非零数字键。我的密钥对重要数据进行编码,碰巧在我试图调试的表单上以1开头。我注意到CodeIgniter的Form_验证类在我的数据的第二行和第三行(分别使用键2和键3)调用我的验证器,而不是第一行(使用键1)


为什么会这样?指示您可以使用非数字数组键,因此人们希望非零数字数组键也能工作。

经过一些调试,我发现Form_validation::_execute()(在system/libraries/Form_validation.php中)有一个$cycles变量,一个基于零的整数,它度量对基于数组的输入调用任何特定规则的次数。不幸的是,_execute()函数使用这个$cycles变量来引用post数据的元素(例如,我的构建中的第552行,看起来是2.2.0)。其结果是绕过未设置为零整数键的输入数组元素。我通过将我的数组键控方案更改为基于零的计数,并将我放入这些键中的数据编码到其他地方,从而解决了我的问题

这可能会在CodeIgniter 3中得到修复,但是对于那些仍然使用CodeIgniter 2并使用默认验证工具验证表单中的数组输入的人,请注意这一点