7_2:Validate 验证器使用 + 内置规则

一 验证器的定义

1)知识大纲

1 验证规则 $rule    [ 属性 ]
2 错误提示 $message [ 属性 ]
3 验证场景 $scene [ 属性 ]
4 细腻的场景验证 $sceneName() [ 方法 ] scene不能修改
5 自定义验证规则 $funName() [ 方法 ] 参数1,2必须 3-5选填

2)使用范例

复制代码
<?php
namespace app\admin\validate;
use think\validate;

class Demo extends Validate
{
    //1 验证规则
    protected $rule = [
        'name'        =>  ['require','max'=>10,'checkName'=>'李白'],//数组形式传入
        'email|邮箱'  =>  'require|email',//字符串形式传入
        'age'         =>  'require|number|betweent:20,50',
    ];

    //2 错误提示
    protected $message = [
        'name.require' => ['code'=>100,'msg'=>'姓名不能为空'],//数组形式传入
        'name.max' => '名称不能大于10位',//字符串形式传入
        'email.require' => '邮箱不能为空',
        'email.email' => '邮箱格式错误',
        'age.between' => '年龄范围不合法'
    ];

    //3 验证场景
    protected $scene = [
        'edit' => ['name','email'],
    ];

//4 更细腻的场景验证 [ 是方法 ] protected function sceneEdit(){ return $this->only(['name','age']) ->remove('name','max')->append('name','min:2'); //only 需要验证的字段 //remove 需要移除的属性 //append 需要添加的属性
     
注意事项    
//对一个字段多次规则的补充 [ 追加 或 删除 ]
    //remove('name', 'xxx|yyy|zzz')或 remove('name', ['xxx', 'yyy', 'zzz']); //正确的调用     //remove('name', 'xxx')->remove('name', 'yyy')->remove('name', 'zzz'); //错误的调用 后面的会覆盖前面的
  }

//5 自定义验证方法 3-5可选参数 protected function checkName($value,$rule,$data,$field,$title){ var_dump($value);//需要验证的值 var_dump($rule);//验证规则 var_dump($data);//提交的所有数据 var_dump($field);//哪个字段再使用当前规则 var_dump($title);//字段的说明 return $value != $rule ? true : '这个名称不能注册';//如果相等 就不能注册 } }
复制代码

 

二 控制器使用

1)调用验证类的四个方法

复制代码
<?php
namespace app\admin\controller;
use think\facade\View;
use app\admin\validate\Demo as DemoValidate;

class Demo
{
    public function index(){

        $validate = new DemoValidate();//1 new 实例化别名调用

        $validate = validate(DemoValidate::class); //2 助手函数 别名调用

        $validate = validate('app\admin\validate\Demo'); //3 助手函数 全命名空间调用

        $validate = validate('Demo');//4 助手函数 只写文件名 系统自动定位调用

        $validate = validate('DemoValidate');//助手函数 别名调用不到

        return View::fetch();
    }
}
复制代码

2)使用范例

复制代码
<?php
namespace app\admin\controller;
use think\facade\View;
use app\admin\validate\Demo as DemoValidate;
use think\exception\ValidateException;
class Demo
{
    public function index(){

        //1 try catch方式
        try{
        //场景验证scene 批量验证batch 验证check
            validate(DemoValidate::class)->scene('add')->batch(true)->check([
                'name' => 'fdf',
                'email' => ''
            ]);
        } catch (ValidateException $e) {
            echo $e->getError();
        }

        //2 用 if 判断
        $validate = new DemoValidate();
        if (!$validate->scene('add')->batch(true)->check([
            'name' => 'fdf',
            'email' => 'ff'
        ])) {
            return $validate->getError();
        }
    }
}

两种方式:
1try catch 抛出异常
2if return 错误信息

常用的验证方法
scene('add') //场景验证
batch(true)  //批量验证
check($data) //执行验证

为什么批量验证
1、在验证过程中有一个子段通不过,后面的就不验证了,所以需要批量验证。
2、批量验证放回是数组
3、批量验证方法batch()必须放在check()方法前面
复制代码

 

三 内置规则

1)格式验证

2)长度 和 区间验证  

  3)字段比较类

  4)filter验证

支持使用 filter_var 进行验证
'ip'=>'filter:validate_ip'

 5)正则验证

'zip'=>'\d{6}', // 或者 'zip'=>'regex:\d{6}',

 6)上传验证

复制代码
1 是否是一个上传文件   file

2 是否是一个图像文件 image:width,height,type [ width和height必须同时定义 width height type 都是可选 ]

3 验证上传文件后缀 fileExt

4 验证上传文件类型 fileMine

5 验证上传文件大小 fileSise
复制代码

 7)其他验证

1 表单令牌验证  token:表单令牌名称

2 字段值唯一验证 unique

3 其他的用到再看手册

 

posted @   棉花糖88  阅读(377)  评论(0)    收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示