小程序全栈学习-项目中的验证层

作者: Answer_ccbb | 来源:发表于2019-02-04 17:11 被阅读10次

       在一个全栈项目中,验证层是用来验证客户端传来的参数是否合法的,其重要性不言而喻。它是由一系列相互独立的验证器组成的,每个验证器完成一类参数的验证。在控制器接口需要验证参数的时候可以直接调用,思路清晰,可重用性好。

验证层结构

        验证层中的验证器必须完成某一类参数的验证,所以写代码的时候要保证它的可共用性。如上图所示:在BaseValidate类中完成参数的获取和验证的执行代码(BaseValidate集成Validate);在其余各验证器中完成验证规则的制定。

示例:完成验证参数id是不是正整数的验证层的建立:

1、BaseValidate类中的代码(得到请求数据,执行验证):

class BaseValidate extends Validate  //集成TP5中的Validate

{

    public function goCheck()  //函数goCheck()执行验证

{

        $request = Request::instance();    //实例化Request类

        $param = $request->param();  //得到HTTP请求中的所有参数

        $result = $this->check($param); //执行Validate类中的check,执行验证,结果赋给result  要将得到的参数param传递给check函数作为参数

        if(!$result)   //验证失败

{

            $error = $this->error;  //得到错误信息,赋值给变量error

            throw new Exception($error); //终止程序,跑出异常,参数为上面得到的error信息

        }

        else   //验证通过

        {

            return true;//返回真

        }

    }

2、 IDMustBePositiveInt-验证器-制定验证规则

class IDMustBePositiveInt extends BaseValidate  //集成BaseValidate

{

    protected $rule = [   //验证规则

        'id' => 'require|isPositiveInteger' //一个内置验证规则,一个自定义验证规则

    ];

    protected function isPositiveInteger($value, $rule = '', $data = '', $field = '') //自定义验证对=规则的方法

{

        if (is_numeric($value) && is_int($value + 0) && ($value + 0) > 0){

        return true;

    }

    else{

            return $field.'必须是正整数';

    }

}

}

3、控制器接口调用验证层

(new IDMustBePositiveInt())->goCheck();  //仅用一句话就可以实现参数验证,实在是太牛了

相关文章

网友评论

    本文标题:小程序全栈学习-项目中的验证层

    本文链接:https://www.haomeiwen.com/subject/husfsqtx.html