荟萃馆

位置:首页 > 计算机 > php语言

ThinkPHP中自动验证

php语言3.09W
ThinkPHP中自动验证
  学无止境,刚开始学习PHP会觉得简单,但是越学会越难。下面是小编整理的关于ThinkPHP中自动验证的知识,希望对大家有用,更多消息请关注应届毕业生网。  ThinkPHP中自动验证:array(‘字段’,‘验证规则’,‘错误提示’[,‘验证条件’,‘附加规则’,‘验证时间’]),。  1、验证字段:一般来说是表单的字段名,但不一定需要与数据表的.字段匹配,比如新用户注册时常见的密码确认  2、验证规则:系统内置了常用的规则,require(字段必填)、 email(邮箱格式)、url(url格式)、currency(货币)、number(正整数)、integer(整数)、double(浮点数)、zip(邮  政编码  政编码)、english。这些规则默认采用的附加规则是 regex,正则表达式验证,只不过是设定好的。  3、错误信息:验证失败后的提示。  4、验证条件:共三种:  ::EXISTS_VALIDATE 或 0,表示存在字段就验证(推荐使用) ;  ::MUST_VALIDATE 或 1,表示必须验证;  ::VALUE_VALIDATE 或 2,表示值不为空的时候验证。  5、验证时间:主要新增修改等验证。  ::MODEL_INSERT 或 1 新增数据时验证;  ::MODEL_UPDATE 或 2 编辑数据时验证;  ::MODEL_BOTH 或 3 全部情况下验证(推荐使用)。  一、静态定义  在模型类里预先定义好该模型的自动验证规则,就是静态定义。  1、在Home/Model目录下建立文件,内容如下:  ?  1  2  3  4  5  6  7  8  9  10  11  12  class UserModel extends Model {  protected $_validate = array(  //默认情况下用系统内置  array('user', 'require', '用户不得为空!'),  //验证数据唯一性  array('user', '', '用户名称已存在!',2,'unique',1),  //验证密码不得为空  array('pass', 'require', '密码不得为空!'),  //密码不得小于六位不得大于20位  array('pass', '6,20', '密码不得小于6位,不得大于20位', 3,'length'),  );  }  2、在Home/controller目录下建立,内容如下:  ?  1  2  3  4  5  6  7  8  9  10  //控制器create()方法自动调用验证  $user = D('User');  $data['user'] = '蜡笔小新';  $data['pass'] = '123';  if ($user->create($data)) {  echo '所有数据验证成功!';  } else {  //输出错误信息  var_dump($user->getError());  }  重点介绍一下附加规则中的callback(回调验证)和function(函数验证):  1、callback(回调验证)  中的格式如下:  ?  1  2  3  4  5  6  7  8  9  10  11  12  13  14  class UserModel extends Model{  protected $_validate=array(  array('user','checklength','用户名必须在3-5之间!',0,'callback',3,array(3,5)),  );  function checklength($str,$min,$max){  preg_match_all("/./u", $str,$matchs);  $len=count($matchs[0]);  if($len<$min || $len>$max){  return false;  }else{  return true;  }  }  }  其中回调函数直接写在user类里面  2、function(函数验证)  中的格式如下:  ?  class UserModel extends Model{  protected $_validate=array(  array('user','checklength','用户名必须在3-5之间!',0,'function',3,array(3,5)),  );  }  函数内容需要在 Home/Common 文件夹下的 Common 文件夹建立 文件,会自动加载,内容如下:  ?  function checkLength($str,$min,$max) {  preg_match_all("/./u", $str, $matches);  $len = count($matches[0]);  if ($len < $min || $len > $max) {  return false;  } else {  return true;  }  }