接口有一个非常重要的原则即验证客户端传入的是不是自己所需要的,有没有违反定义的规则。客户端传过来的任何东西都是不可信的,所以接口校验过程是非常重要的。
首先我们先讲解一下 validate。
在 tp5 中 validate 有两种用法:
1.独立验证
2.验证器
我们先来看一下独立验证:
使用之前先 use 引入进来。
use think\Validate
假设我们现在有一组数组形式的数据需要验证:
$data=[
'name' => 'frank',
'email' => 'frank@qq.com'
]
既然我们对数据有所要求,我们就需要进行定义要求,即通过 validate 类的数组参数来实现:
$validate = new Validate([
'name' => 'require|max:10',
'email' => 'email'
])
现在我们有了被验证的数据和验证的规则,下面就来执行验证:
$result = $validate->check($data);
在 debug 页面时我们可以看到 $result 为 true。
如果我们修改'name' => 'frank'为'name' => 'frankfrankfrank'让其长度超过10,那么 $result 为 false。但是有时我们需要得到具体的错误信息则:
echo $validate->getError();
会看到打印出:'name长度不能超过 10'
但是当我们有多个错误的时候,还是只会显示第一个错误,这时候我们需要 batch() 批量验证:
$result = $validate->batch()->check($data);
var_dump($validate->getError());
此时 $validate->getError()返回的是一个数组而不是字符串,所以要用 var_dump() 输出。
独立验证的缺点也很明显,封装性不是很好,所以我们大部分使用验证器。而验证其这种形式也是 tp5 官方推荐的形式。
下面我们看一下验证器:
我们现在 controller 文件夹下新建一个 validate 文件夹,然后新建一个 TestValidate 的 php Class:
<?php
namespace app\api\controller\validate;
use think\Validate;
class TestValidate extends Validate
{
protected $rule = [
'name' => 'require|max:10',
'email' => 'email'
];
}
进行继承 Validate 然后重写 protected $rule字段。写法与独立验证的 Validate() 参数写法相同。
写好了验证器,之后我们该如何使用呢?
在 Banner.php 中:
将
$validate = new Validate([
'name' => 'require|max:10',
'email' => 'email'
])
替换为:
$validate = new TestValidate();
然后其余用法一样。
在原理上封装器和独立检验并没有什么区别,但是封装器的封装性的优势在今后的代码中会逐渐显现。








网友评论