• PHP Lumen Laravel 解决validate方法自定义message无效的问题


      /**
         * 由于 LaravelLumenRoutingProvidesConvenienceMethods::validate 在验证不通过时,
         * 抛出 IlluminateValidationValidationException 异常时,message字段用的是固定的 => 'The given data was invalid.'
         * 且 AppExceptionsHandler::handler 只输出了异常的message字段,
         * 故自定义错误信息输出json时无法自定义
         *
         * 这个方法在 validate 方法基础上修改,在验证不通过时抛出 AppExceptionsValidationException ,
         * message为错误堆栈中的第一条信息
         *
         * demo
         * $params = $this->validateFilter($request, [
         *     'id' => 'required|string'
         * ],[
         *     'id.required' => 'id必须传'
         * ]);
         *
         * @param Request $request
         * @param array $rules
         * @param array $messages
         * @param array $customAttributes
         * @return array
         * @throws ValidationException
         */
        public function validateMsg(Request $request, array $rules, array $messages = [], array $customAttributes = [])
        {
            $validator = $this->getValidationFactory()->make($request->all(), $rules, $messages, $customAttributes);
    
            if ($validator->fails()) {
                throw new ValidationException($validator->errors()->first());
            }
    
            return $this->extractInputFromRules($request, $rules);
        }

      /**
         * 调用 AppHttpControllersLapBaseController::validateMsg 方法
         * 并且只保留在$rules的key中存在的key,且过滤值为空字符串的数据
         * @param Request $request
         * @param array $rules
         * @param array $messages
         * @param array $customAttributes
         * @return array
         * @throws ValidationException
         */
        public function validateFilter(Request $request, array $rules, array $messages = [], array $customAttributes = [])
        {
            $this->validateMsg($request, $rules, $messages, $customAttributes);
            // 只保留在$rules的key中存在的key
            $rs = collect($request->all())->only(array_keys($rules))->toArray();
            // 过滤值为空字符串的数据
            return array_filter($rs, function ($item) {
                return $item !== "";
            });
        }

    将这两个方法放到 AppHttpControllersController 中,
    或者自己新建一个BaseController extent AppHttpControllersController

    validateMsg 解决了错误信息不会放大异常的message字段的问题,

    validateFilter 则是再进一步的包装,只返回验证规则配置的字段,且过滤值为空字符串的键值对

    参考:
    https://learnku.com/docs/laravel/5.7/validation/2262

  • 相关阅读:
    用标签替换的方法生成静态网页
    SQL Server 索引结构及其使用(三、四)(转载)
    SQL server 2000异地备份
    GridView加自动编号列
    SQL Server 索引结构及其使用(一、二)(转载)
    DropDownTreeList
    SQL函数——将一对多关系转换成一对一关系
    动态sql语句基本语法
    kalilinux MSF数据库的连接
    Linux sudo权限绕过(CVE201914287)
  • 原文地址:https://www.cnblogs.com/lzs-888/p/11463451.html
Copyright © 2020-2023  润新知