在一个全栈项目中,验证层是用来验证客户端传来的参数是否合法的,其重要性不言而喻。它是由一系列相互独立的验证器组成的,每个验证器完成一类参数的验证。在控制器接口需要验证参数的时候可以直接调用,思路清晰,可重用性好。
验证层结构验证层中的验证器必须完成某一类参数的验证,所以写代码的时候要保证它的可共用性。如上图所示:在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(); //仅用一句话就可以实现参数验证,实在是太牛了
网友评论