假如我们有一个Settings类,我们需要对表单提交的数据进行有效验证。
先写一个数据验证方法:
/**
* 验证器
* @param $param array|object 验证的数据
* @param $action string 方法名
* @return bool bool
*/
private function settingsValidate($param,$action)
{
$validate = $this->getValidateBase(Request()->controller());
if($validate instanceof Settingss){
#批量验证数据是否合法
$settingsValidate = $validate->scene($action)->batch(true)->check($param);
if (!$settingsValidate) {
return $this->ServerResponse::createByError($validate->getError());
}
return $validate->hasScene($action);
}
return false;
}
$this->getValidateBase(Request()->controller());
这句其实是调用父类中的方法,类似工厂设计模式,我们看父类base中的getValidateBase()方法的写法:
然后我们进行场景验证,名字是¥action 。这个名字与当前方法的名字是一样的。例如settings验证器中的某个场景写法:
而且我们进行的是批量验证batch(true)
,只要不满足某些条件,它会一起弹出错误提示,而不是单条提示。
#批量验证数据是否合法
$settingsValidate = $validate->scene($action)->batch(true)->check($param);
当验证失败的的时候,我们放出错误提示:
return $this->ServerResponse::createByError($validate->getError());
如果所有字段全部满足要求,那么我们返回true就可以了 。否则返回false。
至此一个验证方法就完成了。
然后我们可以在控制器中直接调用这个方法就可以完成数据的验证:
$this->settingsValidate($param,$action);
think you !