Martix 发表于 2017-4-17 14:02:31

关于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]
查看完整版本: 关于CI自定义表单验证(二)