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


In CodeIgniter 2.2.0, why does the form validator not invoke my custom validation routine on array input data?

情况

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

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

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

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