param_name = $param_name; } /** * 验证对象数组的值 * @param array $param 需要验证的参数数组 * @param array $validate 验证规则 * @return array */ public function validate($param = array(), $validate = array()) { foreach ($validate as $key => $val) { /*判断变量是否必传,默认为必传*/ if (!isset($val['required']) || $val['required']) { if (empty($param[$key]) && $param[$key] != '0') { return $this->returnParamError($key, '缺少参数'); } } if (isset($param[$key]) && $param[$key] !== null) { if (!empty($val['reg'])) { /*变量需要正则验证*/ if (!preg_match($val['reg'], $param[$key])) { return $this->returnParamError($key, '参数值有误'); } } else if (!empty($val['type'])) { if ($val['type'] == 'mobile') { if (!verifyMobilePhone($param[$key])) { return $this->returnParamError($key, '手机号有误'); } } else if ($val['type'] == 'name') { if (!verifyName($param[$key])) { return $this->returnParamError($key, '姓名格式有误'); } } else if ($val['type'] == 'money') { if (isset($val['min'])) { if (!verifyNumber($param[$key], 2, $val['min'])) { return $this->returnParamError($key, '小于最小值'); } } else { if (!verifyPrice($param[$key])) { return $this->returnParamError($key, '价格不正确'); } } } else if ($val['type'] == 'number') { if (!verifyNumber($param[$key], isset($val['step']) ? $val['step'] : 0, isset($val['min']) ? $val['min'] : 0)) { return $this->returnParamError($key, '值有误'); } } else if ($val['type'] == 'json_array') { $param[$key] = htmlspecialchars_decode($param[$key]); $temp = json_decode($param[$key], true); if (empty($temp)) { return $this->returnParamError($key, '缺少参数'); } else if (!is_array($temp)) { return $this->returnParamError($key, '数据类型不正确'); } } else { if (gettype($param[$key]) != $val['type']) { /*变量有类型限制('boolean','integer','double','string','array','object','resource','NULL','unknown type')*/ return $this->returnParamError($key, '数据类型不正确'); } } } if (isset($val['min'])) { /*取值范围*/ if ($param[$key] < $val['min']) { return $this->returnParamError($key, '小于最小值'); } } if (isset($val['max'])) { /*取值范围*/ if ($param[$key] > $val['max']) { return $this->returnParamError($key, '大于最大值'); } } if (!empty($val['in']) && is_array($val['in'])) { if (!empty($val['type']) && $val['type'] == 'array') { //取交集 if (!is_array($param[$key]) || count($param[$key]) != count(array_intersect($param[$key], $val['in']))) { return $this->returnParamError($key, '不在可取值之内1'); } } else { if (!in_array($param[$key], $val['in'])) { return $this->returnParamError($key, '不在可取值之内2'); } } } if (!empty($val['maxLen'])) { if (strlen($param[$key]) > $val['maxLen'] * 3) { return $this->returnParamError($key, '超过最大长度'); } } if (!empty($val['require_link'])) { foreach ($val['require_link'] as $v1) { if (in_array(gettype($v1['require_data']), array('boolean', 'integer', 'double'))) { if ($param[$key] == $v1['require_data']) { foreach ($v1['link_key'] as $v2) { if (empty($param[$v2])) { return $this->returnParamError($v2, '不能为空'); } } } } else if (gettype($v1['require_data']) == 'array') { switch ($v1['require_data'][0]) { case 'lt': if ($param[$key] < $v1['require_data'][1]) { foreach ($v1['link_key'] as $v2) { if (empty($param[$v2])) { return $this->returnParamError($v2, '不能为空'); } } } break; case 'elt': if ($param[$key] <= $v1['require_data'][1]) { foreach ($v1['link_key'] as $v2) { if (empty($param[$v2])) { return $this->returnParamError($v2, '不能为空'); } } } break; case 'gt': if ($param[$key] > $v1['require_data'][1]) { foreach ($v1['link_key'] as $v2) { if (empty($param[$v2])) { return $this->returnParamError($v2, '不能为空'); } } } break; case 'egt': if ($param[$key] >= $v1['require_data'][1]) { foreach ($v1['link_key'] as $v2) { if (empty($param[$v2])) { return $this->returnParamError($v2, '不能为空'); } } } break; case 'eq': if ($param[$key] == $v1['require_data'][1]) { foreach ($v1['link_key'] as $v2) { if (empty($param[$v2])) { return $this->returnParamError($v2, '不能为空'); } } } break; case 'neq': if ($param[$key] != $v1['require_data'][1]) { foreach ($v1['link_key'] as $v2) { if (empty($param[$v2])) { return $this->returnParamError($v2, '不能为空'); } } } break; case 'in': if (in_array($param[$key], $v1['require_data'][1])) { foreach ($v1['link_key'] as $v2) { if (empty($param[$v2])) { return $this->returnParamError($v2, '不能为空'); } } } break; case 'not in': if (!in_array($param[$key], $v1['require_data'][1])) { foreach ($v1['link_key'] as $v2) { if (empty($param[$v2])) { return $this->returnParamError($v2, '不能为空'); } } } break; } } } } } } return array('error' => 0, 'message' => '验证成功'); } /** * @param $key 键名 * @param string $message 错误描述 * @return array */ protected function returnParamError($key, $message = '参数值有误') { if ($this->param_name[$key]) { return array('error' => 1, 'key' => $key, 'message' => $message . ':' . $this->param_name[$key]); } else { return array('error' => 1, 'key' => $key, 'message' => $message); } } /** * 验证参数是否正确 * @param $param : 后台要的 * @param $post : 前台传递 * @return mixed */ public function validationParameters($param,$post){ foreach ($param as $value){ $isData = array_key_exists($value,$post); if($isData === false){ $message = "缺少参数 '".$value."'"; $res = callBack(statusCode()['error'],$message); return $res; } } return true; } }