在 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 class 在我的数据的第二行和第三行(分别使用键 2 和 3)而不是第一行(使用键 1)调用我的验证器。

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

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

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