AOS 后台的 KPI 参数验证过滤实现

关键字 :aosPHP
说明使用 thinkPHP 框架带有的验证器,在所有 KPI 请求入口统一验证请求参数

1. 在 logic 层的父类 BaseModel.php 统一做接口请求参数的验证

/**
* 构造函数
*
* @param string $functionName 路由调用的方法名字
* @param array $params 传入的参数
*/
function __construct($functionName, $params)
{
/*
* 例如:$functionName = "home"
* $class = "app\api\model\Devices"
* $validate = "Devices"
*/
$class = get_called_class();
$validate = stripcslashes(strrchr($class, "\\"));
// 参数验证
validateParams($validate, $functionName, $params);
$this->params = $params;

// 管理员权限 管理员人员
//$arr_employee_ids = adminTable::getAdminEmployees($admin_id);
}


2. 在 validate 目录下创建不同类并且配置不同的参数验证规则

新增逻辑类时,可新增对应的验证器类去校验请求参数的正确与否

// 权限类的验证配置文件
namespace app\api\validate;

use think\Validate;

class Role extends Validate
{

/**
* 定义验证规则
* 格式:'字段名' => ['规则1','规则2'...]
*
* @var array
*/
protected $rule = [
'id' => 'require|number',
'name' => 'require|chsDash',
'path' => 'require',
'component' => 'require|alpha',

];

/**
* 定义错误信息
* 格式:'字段名.规则名' => '错误信息'
*
* @var array
*/
protected $message = [
'id.require' => 'role id empty',
'id.number' => 'role id format',
'name.require' => 'role name empty',
'name.chsDash' => 'role name format',
'path.require' => 'role path empty',
'component.require' => 'role component empty',
'component.alpha' => 'role component format',
];


/**
* 验证场景,根据登录方式决定
*
* @var array
*/
protected $scene = [
'add' => ['path', 'component', 'name'],
'update' => ['id', 'path', 'component', 'name'],
'delete' => ['id'],

];


3. 实际案例:自定义批量添加专案数据时,对专案数据的验证

// 自定义验证批量添加专案的数组格式
protected function checkCustomersArr($value, $rule, $data = [])
{
switch ($rule) {
case "customers":
if(is_array($value)) {

if(empty($value)) {
return "提交的专案数据不能为空";
}
// 专案数组
$arrProjects = $value;
foreach($arrProjects as $key => $project) {
$row = $key + 1;
foreach($project as $proKey => $proVal) {
switch($proKey) {
case 'project_id':
$tmpRegex = "/^S\d{2}-\d{3}$/";
if(!preg_match($tmpRegex, (string) $proVal)) {
return "第".$row."行的方案编号【".$proVal."】数据有误";
}
break;
case 'sales_sugdate':
if(false === strtotime($proVal)) {
return "第".$row."行的申请日期【".$proVal."】数据有误,请输入正确的日期格式";
}
break;
case 'applications':
if(!is_array($proVal)) {
return "第".$row."行的应用数组【".$proVal."】数据有误,应用数据应为数组格式";
}
break;
case 'components':
if(!is_array($proVal)) {
return "第".$row."行的组件数组【".$proVal."】数据有误,组件数据应为数组格式";
}
break;
case 'estimate_pp_date':
if(false === strtotime($proVal)) {
return "第".$row."行的预计量产日期'【".$proVal."】数据有误,请输入正确的日期格式";
}
break;
case 'engineers':
if(!is_array($proVal)) {
return "第".$row."行的工程师数组【".$proVal."】数据有误,工程师数据应为数组格式";
}
break;
case 'estimate_start':
if(false === strtotime($proVal)) {
return "第".$row."行的预估开始时间'【".$proVal."】数据有误,请输入正确的日期格式";
}
break;
case 'estimate_end':
if(false === strtotime($proVal)) {
return "第".$row."行的预估结束时间'【".$proVal."】数据有误,请输入正确的日期格式";
}
break;
default:
break;
}
}
}
} else {
return "专案数据必须为数组格式";
}
break;

default:
break;
}
}
}

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论