tp5.1使用总结(3):构建统一验证层

引言:为什么构建统一验证层

后端接收到参数,首先要进行参数的验证,不同请求有不同的验证,传统的验证在控制器一直写下去,既影响美观,遇到相同的验证的时候不能进行复用,这里我们稍微改造下做一个验证层:在controller新建一个validate

    1:在controller同层新建validate文件夹

    2:在validate下新建BaseValidate.php 基类验证层

    3:新建TestValidate继承BaseValidate

    4:控制器调用

 一:新建统一验证层

    在模块下controller 同级新建validate文件夹

阿群博客   

二:基类验证器

       1:在统一验证层下新建BaseValidate.php

       2:基类验证器主要统一进行 场景验证选择、结果的输出、共有的验证的方法

<?php
namespace app\api\validate;

use think\Validate;

class BaseValidate extends Validate
{
    public function goCheck($scene='')
    {
        $params = input();
        $query = $this->batch();
        if($scene){
            $query = $query->scene($scene);
        }
        
        if(! $query->check($params)){
            $msg = is_array($this->error) ? implode(';', $this->error) : $this->erro;
            return $msg;
        }

        return true;
    }

    /**
     * 过滤客户端传过来的数据,返回给服务器
     */
    public function getDataByRule($arrays)
    {
        if (array_key_exists('uid',$arrays) || array_key_exists('user_id', $arrays)) {
            throw new ParameterException([
                'msg'=>'参数中包含有非法的参数名uid和user_id'
            ]);
        }

        $newArray = [];
        foreach ($this->rule as $key=>$value) {
            $newArray[$key] = $arrays[$key];
        }
        return $newArray;
    }

    protected function isPositiveInteger($value, $rule='', $data='', $field='')
    {
        if (is_numeric($value) && is_int($value + 0) && ($value + 0) > 0) {
            return true;
        }
        return false;
    }

    protected function isMobile($value, $rule='', $data='', $field='')
    {
        $rule = '^1(3|4|5|6|7|8)[0-9]\d{8}$^';
        $result = preg_match($rule, $value);
        if ($result) {
            return true;
        } else {
            return false;
        }
    }
}



三:TestValidate

    1:新建一个TestValidate集成基类验证器

    2:代码

<?php
namespace app\api\validate;

class TestValidate extends BaseValidate
{
    protected $rule = [
        'name'  => 'require|max:25',
        'age'   => 'require|number|between:1,120',
        'email' => 'require|email',
    ];

    protected $message  =   [
        'name.require' => '名称必须',
        'name.max'     => '名称最多不能超过25个字符',
        'age.number'   => '年龄必须是数字',
        'age.between'  => '年龄只能在1-120之间',
        'email'        => '邮箱格式错误',
    ];

    protected $scene = [
        'edit'  =>  ['name','age'],
        'add'  =>  ['email'],
    ];
}


四:控制器调用

<?php
namespace app\api\controller\v1;

use app\api\validate\TestValidate;

class Test
{
    public function index()
    {
        $validate = new TestValidate();
        $res = $validate->goCheck('edit');
        if($res !== true) return json(['code'=>0,'msg'=>$res]);
    }
}

    




阿群博客
请先登录后发表评论
  • 最新评论
  • 总共0条评论