Correction status:Uncorrected
Teacher's comments:
thinkPHP中可用两种方式验证数据:
1、验证器:类 基于系统的验证器类,用户包装后自定义的验证器类
2、独立验证:直接调用框架内置的验证类:think\Validate
___________________________________________________________________________________________________
第一种:验证器类
人为的约定是一个用户自定义验证器类并继承Validate,用来对数据表中的字段进行验证
1、创建验证器类
check($data , $rules = [], $scene = '')
// 1、给数据表中的字段帮规定验证规则 protected $rule = [ 'name' => 'require|chsAlpha|max:25', 'sex' => 'require|number|in:0,1', ... ]; // 2、验证提示信息 protected $message = [ 'name.require' => '名称必须', 'name.chsAlpha' => '名称只能是汉字、字母', 'name.max' => '名称最多不能超过25个字符', 'sex.require' => '性别必须', 'sex.number' => '性别必须是数字', 'sex.in' => '性别只能是1或0', ... ];
2、使用定义的验证类
先引入 use app\index\validate\Staff as staffValidate; 在类中验证数据 public function vali(){ $data = [ // 模拟数据 'name'=>'灰灰', 'sex'=>1 ]; $validate = new staffValidate; // 实例化验证器类 $res = $validate->check($data); if (false === $res){ halt($validate->getError()); // $validate->getError() 如果验证错误显示验证器类中对应的验证提示信息 } dump('验证通过'); }
——————————————————————————————————————————————————
第二种:独立验证
分两种:
1. 独立验证:直接调用框架内置的验证类:think\Validate
需要创建验证器类对象
Validate::make($rule [,$message]) 提示信息可选
public function vali2(){ $rule = [ 'name' => 'require|chsAlpha|max:25', 'sex' => 'require|number|in:0,1' ]; $message = [ 'name.require' => '名称必须', 'name.chsAlpha' => '名称只能是汉字、字母', 'name.max' => '名称最多不能超过25个字符', 'sex.require' => '性别必须', 'sex.number' => '性别必须是数字', 'sex.in' => '性别只能是1或0' ]; $validate = Validate::make($rule,$message); $data = [ 'name'=>'小飞鼠', 'sex'=>1, 'age'=>22, 'email'=>'admin@php.cn' ]; $res = $validate->check($data); if (false === $res){ halt($validate->getError()); } dump('验证通过'); }
2. 独立验证:使用验证过对象链式调用
public function vali3(){ $validate = new Validate(); // 链式调用 $res = $validate->rule([ 'name' => 'require|chsAlpha|max:25', 'sex' => 'require|number|in:0,1', 'age' => 'require|number|between ]) ->message([ 'name.require' => '名称必须', 'name.chsAlpha' => '名称只能是汉字、字母', 'name.max' => '名称最多不能超过25个字符', 'sex.require' => '性别必须', 'sex.number' => '性别必须是数字', 'sex.in' => '性别只能是1或0' ]) ->check($data); if (false === $res){ halt($validate->getError()); } dump('验证通过'); }
如果不加验证消息则会显示默认的提示