ThinkPHP5 验证器的具体使用
前言:我们在做API开发的时候,我们会接受客户端传来的参数,大家都知道这个参数是不可信的,我们后端开发人员必须对这个参数进行验证。我在之前的开发中只是知道tp5的验证器,并不知道他的用途,因为之前的开发验证,往往都是基于模型字段进行的验证。而验证器更适用与API开发,今天就简单讲下验证器的使用 目录:
1.创建验证器首先我们需要一个文件夹来存放我们的验证器,我们在模块下创建一个同控制器平级的文件夹,取名为validate 然后我们就可以来建立验证器了,我们只需要创建一个类,继承tp5的validate类就可以了。 但是熟悉面向对象思想的朋友一定知道,当我们需要一个方法每个验证器都要用到,但是又不去修改tp5的源码时。我们就多写一个类来作为我们的基类。所有的验证器都继承这个基类,然后这个基类再去继承tp5的validate类。 这里我们把他取名为baseValidate 那么现在再创建一个正儿八经的验证器了。举个例子: use thinkValidate;
class User extends Validate } 再到控制器或者模型中去实例化再调用 'thinkphp','email'=>'thinkphp@qq.com'
];
$validate = Loader::validate('User'); if(!$validate->check($data)){ 这样一个验证器的应用就写好了。我们来看看有没有什么可以简化的地方。
这两部是每次接口被请求都是要做的。那么我们就想把这个封装到BaseValidate中去 param();
if ($this->check($data)) {
//如果验证通过了
return true;
}else{
//如果验证没通过
$error=$this->getError();
//抛出异常
throw new Exception($error);
}
}
}
这个goCheck方法封装好后,有人可能会问,这个验证规则在哪里呢? 2. 书写单独验证器之前有说过BaseValidate是用来被继承的,那么真正的验证器,我们还没有开始写。规则就制定到这个验证器中。为了更深入的理解,这里举例子顺便使用了自定义验证 规则。其实tp写好了的验证规则应该很够用了 我们就拿最常接受的数据来举例子,那就是 id 同常这个id就代表了我们数据库中某条数据的id,这个id我们往往设计为无符号自动递增的主键,翻译成人话就是正整数。那么如果客户传来的参数是负数或者小数那么就不应该通过验证。 我们根据上述需求,我们来创建一个验证器。位置还是跟之前的一样在validate文件夹下 取名为IdMustBePositiveInt.php(名字有点长,不过好在望文知意) 首先肯定是要继承我们的基础验证器 然后制定规则,为一个固定的成员变量赋值 'require|positiveInt'
];
那么自定义规则怎么干呢,其实也简单。定义一个被保护的方法 0) {
return true;
}else{
return 'id必须为正整数';
}
}
!!注意:这里如果判断失败:返回的不是false 返回的是错误信息。 3. 调用验证根据我们之前的封装,我们需要达到的效果就是接受参数,验证参数一体。那么现在我们如何调用验证呢 厉害的来了,我们还是以id为例 goCheck();
}
这次只举了id为例子,虽然看上去比直接写独立验证麻烦很多,但是大家仔细想想,这个验证规则其实在很多地方都是一样的,比如密码验证规则,用户名验证规则等,当这个项目写完了。你已经完成了很多验证器。其实在下个项目中还可以继续套用的哦 TP5验证规则使用①静态调用(使用内置的规则验证单个数据,返回值为布尔值) ②模型验证(在模型中的验证方式) validate(
[
'name' => 'require|max:25','email' => 'email',],[
'name.require' => '名称必须','name.max' => '名称最多不能超过25个字符','email' => '邮箱格式错误',]
)->save($data);
if(false === $result){
// 验证失败 输出错误信息
dump($User->getError());
}
③控制器验证(控制器中进行验证) 如果你需要在控制器中进行验证,并且继承了thinkController的话,可以调用控制器类提供的validate方法进行验证,如下: validate(
[
'name' => 'thinkphp','email' => 'thinkphp@qq.com',[
'name' => 'require|max:25',]);
if(true !== $result){
// 验证失败 输出错误信息
dump($result);
}
控制器中的验证代码可以简化为: validate($data,'User');
if(true !== $result){
// 验证失败 输出错误信息
dump($result);
}
如果要使用场景,可以使用: validate($data,'User.edit');
if(true !== $result){
// 验证失败 输出错误信息
dump($result);
}
在validate方法中还支持做一些前置的操作回调,使用方式如下: validate($data,'User.edit',[],[$this,'some']);
if(true !== $result){
// 验证失败 输出错误信息
dump($result);
}
好了,本次tp5验证器的介绍了就写到这里了,希望对大家的学习有所帮助,也希望大家多多支持编程之家。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |