时间: 2014年4月2日21:40:30仿TP自动验证功能


字段太多,手动验证太费劲

需要重复的地方,自动化完成


验证规则:

1.必须检测字段

2.有字段则检测,无此字段则不检测,如性别,没有则不检测,有则必定是男女之一

3.如有内容不空 ,则检查,如签名档,非空,则检查长度


Model增加增加自动验证功能

   protected  $valid = array();//验证规则

   protected  $error = array();


/*

    * 验证的规则:

    * 格式:

    * $this->_valid = array(

    *  array('要验证的规则字段名'

    *         0/1/2 验证的场景,

    *         '报错提示',

    *        'require/in(几种情况)/between(范围)/length(某个范围) ')

    * )

    *

    *  protected  $valid = array(

       array('goods_name',1,'商品名不能为空','require'),

       array('cat_id',1,'必须是整形值','number'),

       array('is_new',0,'is_new只能是01','in','0,1'),

       array('goods_brief',2,'商品简介应在10100字符','length','10,200')

   )

   验证没通过,添加检验未通过的报错提示

   无论那一条未通过,都不能通过

   */

   public  function  _validate($data){

       if(empty($this->valid)){

           return true;

       }

       $this->error = array();

       foreach($this->valid as $k=>$v){

           switch($v[1]){

               //1 必须检测

               case 1:

                   if(!isset($data[$v[0]]) ){

                       $this->error[] = $v[2];

                       return false;

                   }

                   if(!$this->check( $data[$v[0]],$v[3]) ){


                       $this->error[] = $v[2];

                       return false;

                   }

                    break;

               //0 有则检测,调用check(),传递值,规则,参数

               case 0:

                   if(isset($data[$v[0]])){


                       if(!$this->check($data[$v[0]],$v[3],$v[4] )){

                           $this->error[] = $v[2];

                           return false;

                       }

                   }

                   break;

               //2 如果有,且非空则检测

               case 2:

                   if(!isset($data[$v[0]]) && !empty($data[$v[0]])){

                       if($this->check($data[$v[0]],$v[3],$v[4])){

                           $this->error[] = $v[2];

                           return false;

                       }

                   }

           }

       }

       return true;

   }

   public  function  getErr(){

       return $this->error;

   }

   /*

    *验证规则讨论

    *  */

   protected  function  check($value,$rule='',$parm=''){

       switch($rule){

           //验证是否为空,值为空为真,取反为假 ,即如果结果为空,则返回假

           case 'require':

               return !empty($value);  //不需要break,因为使用了return

           // 判断

           case 'number':

               return  is_numeric($value);

           //在某几个可选的范围内,0,1 把数据拆成数组,判断数组是否在数组中

           case 'in':

               $tmp = explode(',',$parm);

               return in_array($value,$tmp);

           //在那个范围内,10,100 拆成数组,赋给两个值,判断和最大最小的比较结果

           case 'between':

               list($min,$max) = explode(',',$parm);

               return $value>=$min && $value<=$max;

           //验证字符长度,长度拆成数组,赋给两个值,判断字符长度要在字符长度要求内

           case 'length':

               list($min,$max) = explode(',',$parm);

               return mb_strlen($value,'UTF-8')>=$min && mb_strlen($value,'UTF-8')<=$max;

           default:

               return false;

       }

   }


GoodsModel.class.php增加

   /*验证规则:

   0 可以不填,但是有必须验证

   1 必须验证:

   */

   protected  $valid = array(

       array('goods_name',1,'商品名不能为空','require'),

       array('cat_id',1,'必须是整形值','number'),

       array('is_new',0,'is_new只能是01','in','0,1'),

       array('goods_brief',2,'商品简介应在10100字符','length','10,200')

   );//验证规则

goodaddAct.php增加

//自动验证

if(!$goods->_validate($data)){

   echo implode('<br/>',$goods->getErr());

   echo '数据不合法<br/>';

   exit;

}



你可能感兴趣的:(error,between,检测,require,商品名)