Codeigniter调用form_validation->set_rules时报错Unable to find validation rules
问题解决方法
这个错误是CodeIgniter表单验证类执行run()方法时,检测到没有提前设置任何验证规则导致的,对应你的代码可以按以下步骤排查修复:
开启数组字段验证配置
CI3默认关闭嵌套数组字段的验证支持,你需要在application/config/form_validation.php中添加配置:$config['valid_array_fields'] = TRUE;没有该配置文件的话新建即可,添加后表单验证类才能正确识别
years[intStartYr]这种数组格式的规则字段名。手动传入待验证数据
表单验证类默认直接读取全局$_POST数组,可能和你经过XSS过滤后的$postData存在差异,修改run()调用代码,手动传入待验证的数据:if ($this->form_validation->run($postData) === FALSE) {补充字段存在性判断
你当前直接读取$postData['years'],如果请求中没有years字段会触发PHP Notice,且后续逻辑会直接退出导致规则没有设置,修改取值逻辑:$yearArray = isset($postData['years']) ? $postData['years'] : [];确认验证库加载
在方法开头或者控制器构造方法中明确加载表单验证库,避免自动加载失败的问题:$this->load->library('form_validation');可选调试方案
如果修改后还是报错,可以在set_rules执行完成后打印var_dump($this->form_validation->field_data),确认规则是否成功写入,判断是规则设置环节失败还是执行验证环节的问题。
内容的提问来源于stack exchange,提问作者xanabobana
相关产品推荐
相关产品推荐

