controller(); $action = $request->action(); // 构建验证器类名 $validateClass = str_replace('.', '\\', App::getNamespace() . '\\openapi\\validate\\' . $controller . 'Validate'); // 检查验证器是否存在 if (class_exists($validateClass)) { try { $validate = new $validateClass(); // 获取当前请求的所有参数 $params = $request->param(); // 获取验证器中定义的允许参数 $allowedParams = $this->getAllowedParams($validate, $action); if (!empty($allowedParams)) { // 检查是否有多余参数 $extraParams = array_diff(array_keys($params), $allowedParams); if (!empty($extraParams)) { return JsonService::fail('不允许的参数: ' . implode(', ', $extraParams), [], 400); } } } catch (\Exception $e) { // 验证器实例化失败,继续执行 } } return $next($request); } /** * 获取验证器中允许的参数 * @param $validate * @param string $scene * @return array */ private function getAllowedParams($validate, string $scene = ''): array { $allowedParams = []; // 获取验证规则 if (property_exists($validate, 'rule')) { $rules = $validate->rule ?? []; $allowedParams = array_keys($rules); } // 如果有场景验证,获取场景对应的参数 if (!empty($scene) && property_exists($validate, 'scene')) { $scenes = $validate->scene ?? []; if (isset($scenes[$scene])) { $allowedParams = $scenes[$scene]; } } return $allowedParams; } }