public function handle($request, \Closure $next)
    {
        try {
            // 获取并清理参数
            $params = array_filter(array_map(function ($value) {
                return is_string($value) ? trim($value) : $value;
            }, $request->param()), function ($value) {
                return is_numeric($value) || !empty($value);
            });
            unset($params['controller'], $params['function']);
            if (empty($params)) return $next($request);
            // 设置请求属性,方便后续使用
            $request->checkParam = $params;
            // 获取应用名、控制器和操作名
            $appName = app('http')->getName();
            $controller = Request::instance()->controller(true);
            $action = Request::instance()->action(true);
            // 动态构建验证器路径
            $controllerParts = explode('.', $controller);
            $validatePathParts = array_merge([$appName, 'validate'], $controllerParts);
            $lastKey = array_key_last($validatePathParts);
            $validatePathParts[$lastKey] = ucfirst((string) $validatePathParts[$lastKey]);
//            $validatePath = implode('\\', array_map('ucfirst', $validatePathParts));
            $validatePath = 'app\\'.implode('\\', $validatePathParts);
            // 检查验证器是否存在及场景是否定义
            if (!class_exists($validatePath) || !$this->sceneExists($validatePath, $action)) {
                return $next($request);
            }
            // 验证数据
            $validateInstance = new $validatePath;
            if (!$validateInstance->scene($action)->check($params)) {
                throw new Exception($validateInstance->getError());
            }
        } catch (Exception $e) {
            return show(100, $e->getMessage());
        }
        return $next($request);
    }
    /**
     * 检查指定验证场景是否存在
     *
     * @param string $validateClass 验证类名
     * @param string $scene 场景名
     * @return bool
     */
    protected function sceneExists(string $validateClass, string $scene): bool
    {
        return (new $validateClass)->hasScene($scene);
    }
      
      版权属于:
      小破孩
    
    
    
      
      作品采用:
      
        《
        署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)
        》许可协议授权
      
    
   
        
       
     
       
           
           
           
          
评论 (0)