跟着手册学TP5 —— 验证器

Crasph彬 144 0


tp5内置了validate验证器来实现数据、上传等的验证。验证的方式可分为独立验证,验证器验证等。

独立验证

在任何地方,都可以使用think\Validate的validate验证器来进行验证,使用方法如下:

use think\Validate;

$rule = [
     'name'  =>  'require|length:4,10',
     'email' =>  'email'
];
$message = [
     'name.require'   => '用户名不能为空',
     'name.length'    => '用户名只能在4-10个字符之间',
     'email'          => '邮箱格式不正确'
];
$validate = new Validate($rule,$message);

$data = [
     'name'   =>  'crasph',
     'email'  =>  '646054215@qq.com'
];

if(!$validate->check($data)){
    dump($validate->getError());
}

验证器验证

这是5.0推荐的验证方式,为具体的验证场景或者数据表定义好验证器类,直接调用验证类的check方法即可完成验证,下面是一个例子:

我们定义一个\app\index\validate\User验证器类用于User的验证。

namespace app\index\validate;
use think\Validate;
class User extends Validate{
    protected $rule = [
        'name'  =>  'require|max:25',
        'email' =>  'email',
    ];
}

在需要进行User验证的地方,添加如下代码即可:

$data = [
    'name'=>'thinkphp',
    'email'=>'thinkphp@qq.com'
];
$validate = Loader::validate('User');
if(!$validate->check($data)){
    dump($validate->getError());
}

使用助手函数实例化验证器

$validate = validate('User');

验证规则

tp内置了很多的验证规则,简单写如下几个吧,见下表(其余的参考手册):

字段含义字段含义
require
必须
alpha
字母
number
数字
alphaNum字母、数字
float
浮点型
alphaDash
字母、数字、下划线、破折号
boolean
布尔类型
chs
汉字
email
邮箱
chsAlpha
汉字、字母
array
数组
chsAlphaNum
汉字、字母、数字
accepted
是否为true,on或者1
chsDash
汉字、字母、数字、下划线、破折号
url
是否是有效的url
ip
是否是有效ip
between
区间之内
notBetween
区间之外
in
属于某些值
notIn
在某些值之外
length
长度或者范围之内
max
最大值

内置的验证规则如上,使用方法比较简单,下边写一下自定义的验证规则。

自定义验证规则有5个参数,我们一般只使用前三个即可,即$value,$rule,$data,例子如下:

protected $rule = [
         'name'    =>   'require|alphaNum|max:8',
         'email'   =>   'email',
         'password' => 'alphaNum|length:5,15',
         'repassword' => 'confirmPassword:password'
    ];
    protected $field  = [
        'name'   => '用户名',
        'email'  => '邮箱',
        'password' => '密码',
        'repassword' =>'重复密码'
    ];
    public function confirmPassword($value , $rule , $data){
        if($value != $data['password']){
            return false;
        }
        return true;
    }

其中,$value为验证字段的值,$rule为验证的规则,如上就是password,$data为验证的数组。

场景验证

1、验证器类中定义

场景验证可以直接在验证器类里定义验证场景,如:

protected $scene = [
        'edit'  =>  ['age'=>'require|number|between:1,120'],
        'add'  =>  ['name','age'=>'require|number|between:1,120'],
];

使用时直接$validate->scene('edit')->check($data)来进行场景验证。

2、直接使用

验证场景也可以在实例化Validate类后定义相应的场景,使用方法如下:

$validate = new Validate($rule,$message);
$validate->scene('edit',['name','age'=>'require|number|between:1,120']);
$validate->check($data);

错误信息

错误信息有$validate->getError();来获取。

支付宝打赏
微信打赏
发表评论
表情 图片 链接 代码

分享
微信
微博
QQ