用户
 找回密码
 入住 CI 中国社区
搜索
查看: 2328|回复: 0
收起左侧

[高级] 关于CI自定义表单验证(二)

[复制链接]
发表于 2017-4-17 14:02:31 | 显示全部楼层 |阅读模式
本帖最后由 Martix 于 2017-4-17 14:04 编辑

   这是我写的第一个表单验证方法: 查看

   需求:因为自己所有的验证写在了 config/form_validation.php 配置文件中,所以在进行表单过滤的时候,关联 数据库的字段不能写在配置文件里,

虽然有个 is_unique  方法,但是只能是单个字段,不能实现关联字段的验证, in_list  在表单验证中又不能动态传值.这就很尴尬了.
PHP复制代码
 
        $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 表单自定义方法:

PHP复制代码
 
        /*
        * 加一个跳到 模型(M) 的方法
        */

        public function model_validate($str,$config){
 
                $array = explode(',',$config);
 
                $model = $array[0];
 
                $method = $array[1];
 
                $this->CI->load->model($model);
 
                return  $this->CI->$model->$method($str);
        }
 
 
复制代码


这样就能跳到自己的模型验证了.这里之所以写在核心代码库中,是因为这个类文件已经引入了超全局变量($this->CI),也可以自己写一个类文件,然后自动加载进去.

随后就是在  config/form_validation.php  中其中一个字段这样写: 'rules' => 'model_validate[User_login_model,test]'  验证就会进入 User_login_model/test 方法中.

当然返回错误信息也要配置下.这样就能自定义关联数据库的字段了,不再是单一的字段验证.model_validate[] 传入的参数,可以自己设置.按需求改动.


本版积分规则