0

情况如下:在 CodeIgniter 2.2.0 中构建项目时,我试图使用自定义数据验证器来验证表格形式。表格形式设置为以标准数组格式将 POST 数据传输到服务器,并且我使用的是基于非零的数字键。我的密钥(对重要数据进行编码)恰好在我尝试调试的表单上以 1 开头。我注意到 CodeIgniter 的 Form_validation 类在我的数据的第 2 行和第 3 行(分别使用键 2 和 3)而不是第一行(使用键 1)调用我的验证器。

为什么会这样?CodeIgniter Form_validation 文档表明您可以使用非数字数组键,因此人们希望非零数字数组键也可以工作。

4

1 回答 1

0

经过一些调试,我发现 Form_validation::_execute() (在 system/libraries/Form_validation.php 中)有一个 $cycles 变量,一个从零开始的整数,用于测量在数组上调用任何特定规则的次数-基于输入。不幸的是,__execute() 函数使用这个 $cycles 变量来引用发布数据的元素(例如,我的构建中的第 552 行,它似乎是 2.2.0)。这会导致绕过未键入从零开始的整数的输入数组元素。我解决了我的问题,将我的数组键控方案更改为从零开始的计数,并在其他地方对我放入这些键的数据进行编码。

也许这将在 CodeIgniter 3 中得到修复,但对于那些仍在使用 CodeIgniter 2 并使用默认验证工具验证来自表单的数组输入的用户,请注意这一点。

于 2015-06-13T19:01:08.907 回答