ThinkPHP 内置了数据对象的自动验证功能来完成模型的业务规则验证。自动验证是基于数据对象的,而大多情况下数据对象是基于 $_POST表单 (不是绝对的)创建的。
基本的自动验证功能包括:必须字段、email邮箱格式、唯一性、URL地址、数字、两个字段是否相同、是否等于某个值等。
要使用系统的自动验证功能,只需要在对应的 Model类 里面定义 $_validate 属性(由多个验证因子组成的数组),语法如下:
protected $_validate = array( array(验证字段,验证规则,错误提示[,验证条件][,附加规则][,验证时间]) };
验证因子 | 说明 |
---|---|
验证字段 | 必须。需要验证的表单字段名称,这个字段不一定是数据库字段,也可以是表单的一些辅助字段,例如验证码等。 |
验证规则 | 必须。要进行验证的规则,需要联合附加规则一起使用。 |
错误提示 | 必须。当验证不通过时的提示信息。 |
验证条件 | 可选。包括:
|
附加规则 | 可选。配合验证规则使用,包括:
|
验证时间 | 可选。包括:
|
$rules = array(
array('uphone','checkMobile','手机号格不正确',1,'function'),
array('uphone','','手机号已被注册!',1,'unique',3),
array('password','require','密码必须填写',1),
array('password','/^\w{6,17}$/','密码格式不正确',1),
// array('code','/^\w{6,17}$/','验证码格式不正确',0)
);
$User = M('user');
if($User->validate($rules)->create() ===false){
exit(setResponse('-200',$User->getError()));
}
$phone = I('post.uphone');
$password = I('post.password');
$data = array('uphone'=>$phone,'upass'=>password_hash($password,PASSWORD_DEFAULT));
$data['is_admin_add'] =0;
$data['nickname'] ='游客'.substr($phone,7);
$data['headurl'] ='/Uploads/home/headimg/ETT1Q$6~EYE6HC264L0NBQ3.png';
$uid = $User->add($data);
if($uid){
$user = $User->where(array('user_id'=>$uid))->field('headurl,nickname,user_id,point,score,total_earnings')->find();
sucRet($user);
}else{
errRet('注册失败');
}
function里面的方法可以写到此方法内部 也可以在common/common/function.php 内部unique判断唯一时 该字段名字一定要数据库保持一致