关于CI自定义表单验证(二)
本帖最后由 Martix 于 2017-4-17 14:04 编辑这是我写的第一个表单验证方法: 查看
需求:因为自己所有的验证写在了 config/form_validation.php 配置文件中,所以在进行表单过滤的时候,关联 数据库的字段不能写在配置文件里,
虽然有个 is_unique方法,但是只能是单个字段,不能实现关联字段的验证, in_list在表单验证中又不能动态传值.这就很尴尬了.
$this->load->library('form_validation');
if ($this->form_validation->run('admin/login') == FALSE)
{
$info['error'] = validation_one_errors();
}
//下面的代码要进行数据库验证,
//例:判断是不是数据库中某个类型下的数据
$type = $_POST['type'];
$this->load->model(array(type_model'));
$info = $this->type_model->get_one($type);
if(!$info){
//..........
}
这样每次用到这样的验证,就要自己写一下.(我是这样做的,有好的方法.留言交流),现在觉得有点麻烦,自己扩展一下.
在 system\libraries\Form_validation.php 表单自定义方法:
/*
* 加一个跳到 模型(M) 的方法
*/
public function model_validate($str,$config){
$array = explode(',',$config);
$model = $array;
$method = $array;
$this->CI->load->model($model);
return$this->CI->$model->$method($str);
}
这样就能跳到自己的模型验证了.这里之所以写在核心代码库中,是因为这个类文件已经引入了超全局变量($this->CI),也可以自己写一个类文件,然后自动加载进去.
随后就是在config/form_validation.php中其中一个字段这样写: 'rules' => 'model_validate'验证就会进入 User_login_model/test 方法中.
当然返回错误信息也要配置下.这样就能自定义关联数据库的字段了,不再是单一的字段验证.model_validate[] 传入的参数,可以自己设置.按需求改动.
页:
[1]