是我做错了,还是在使用数组作为字段名时 CodeIgniter 表单验证库中存在错误?
Posted
技术标签:
【中文标题】是我做错了,还是在使用数组作为字段名时 CodeIgniter 表单验证库中存在错误?【英文标题】:Am I doing this wrong, or is there a bug in the CodeIgniter Form Validation library when using arrays as field names? 【发布时间】:2011-11-17 17:32:40 【问题描述】:这是我配置规则的控制器代码:
// Previous address(es)
$this->form_validation->set_rules('prev_house_number[]', 'House Number', 'trim|alpha_numeric');
$this->form_validation->set_rules('prev_abode[]', 'Abode', 'trim');
$this->form_validation->set_rules('prev_house_name[]', 'House Name', 'trim');
$this->form_validation->set_rules('prev_address_line_1[]', 'Address Line 1', 'required|trim');
$this->form_validation->set_rules('prev_address_line_2[]', 'Address Line 2', 'trim');
$this->form_validation->set_rules('prev_city[]', 'Town/City', 'required|trim');
$this->form_validation->set_rules('prev_county[]', 'County', 'trim');
$this->form_validation->set_rules('prev_postcode[]', 'Postcode', 'required|max_length[9]|trim');
$this->form_validation->set_rules('prev_country[]', 'Country', 'trim');
$this->form_validation->set_rules('prev_months[]', 'Previous Months', 'trim|integer');
$this->form_validation->set_rules('prev_years[]', 'Previous Years', 'trim|integer');
用户最多可以输入 5 个以前的地址,如下所示:
地址行 1 字段后面的代码如下所示:
<div class="input w100 f-left c-none">
<input type="text" class="address_line_1 postcode_prev_address_1" id="prev_address_line_1[]" name="prev_address_line_1[]" value="<?php echo set_value('prev_address_line_1[]');?>"/>
<label for="prev_address_line_1[]">Address Line 1 <span class="required">*</span></label>
</div>
问题出在这里:假设我输入了 5 个地址,但表单上的验证失败,所有五个输入区域都将按预期正确重新填充。 但是,CodeIgniter 的验证不适用于阵列输入。
这是验证后的直接截图:
如您所见,尽管它使用正确的值重新填充表单,但它不会对它们应用验证规则,并且似乎无法从控制器中识别它们的存在。
我能做什么?
谢谢!
杰克
【问题讨论】:
是的,这是一个错误。我相信它已经在 2.1(在 GitHub 上开发)中得到了解决,但不要引用我的话。 感谢菲尔澄清。我去看看 Git 上的变化! 很抱歉很痛苦,但我正在努力在 Github 上的任何地方找到任何解决方案。你能指出我正确的方向吗? 在提交历史中搜索文件:github.com/EllisLab/CodeIgniter/commits/develop/system/… 【参考方案1】:看起来这是 Phil 所说的提交:https://github.com/EllisLab/CodeIgniter/commit/5c561805bd9ae6a4ad5d202277c34a879617b683#system/libraries/Form_validation.php
尝试从表单验证库的开发分支中提取代码,看看它是否能解决问题。
【讨论】:
以上是关于是我做错了,还是在使用数组作为字段名时 CodeIgniter 表单验证库中存在错误?的主要内容,如果未能解决你的问题,请参考以下文章