情况如下:在CodeIgniter 2.2.0中构建项目时,我试图使用自定义数据验证器验证表格形式。表格形式设置为以标准数组格式将POST数据传输到服务器,我使用非零的数字键。我的密钥编码重要数据,恰好在我试图调试的表单上以1开头。我注意到CodeIgniter的Form_validation类在我的数据的第2行和第3行(分别使用键2和3)调用我的验证器,而不是第一行(使用键1)。
为什么会这样? CodeIgniter Form_validation documentation表示您可以使用非数字数组键,因此可以预期非零数字数组键也可以使用。
答案 0 :(得分:0)
经过一些调试后,我发现Form_validation :: _ execute()(在system / libraries / Form_validation.php中)有一个$ cycles变量,一个从零开始的整数,用于衡量任何特定规则被调用的次数基于数组的输入。不幸的是,__ execute()函数使用这个$ cycles变量来引用post数据的元素(例如,我的构建中的第552行,看起来是2.2.0)。这导致绕过未键入基于零的整数的输入数组元素。我通过将我的数组键控方案更改为从零开始计数来解决我的问题,并在其他地方编码我放在这些键中的数据。
也许这将在CodeIgniter 3中修复,但对于那些仍然使用CodeIgniter 2并使用默认验证工具验证表单中的数组输入的人,请注意这一点。