/**
* 由于 \Laravel\Lumen\Routing\ProvidesConvenienceMethods::validate 在验证不通过时,
* 抛出 \Illuminate\Validation\ValidationException 异常时,message字段用的是固定的 => 'The given data was invalid.'
* 且 \App\Exceptions\Handler::handler 只输出了异常的message字段,
* 故自定义错误信息输出json时无法自定义
*
* 这个方法在 validate 方法基础上修改,在验证不通过时抛出 \App\Exceptions\ValidationException ,
* 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);
}
  /**
* 调用 \App\Http\Controllers\Lap\BaseController::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 !== "";
});
}

将这两个方法放到 \App\Http\Controllers\Controller 中,
或者自己新建一个BaseController extent \App\Http\Controllers\Controller

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

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

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

PHP Lumen Laravel 解决validate方法自定义message无效的问题的更多相关文章

  1. 浅析调用JSR303的validate方法, 验证失败时抛出ConstraintViolationException

    废话不多说,直接进入正题:如何使用JSR303的validate,进行数据校验,失败后直接抛出异常加入流转信息中,并在form页面提示出来. 首先我们为了启用验证,需要向 项目中添加Bean验证的实现 ...

  2. 表单编辑时el-form的validate方法执行无效,阻塞代码运行 - Element UI踩坑记录

    今天在用element-ui写管理后台需求时,遇到一个奇怪的问题 一个正常带校验的表单,在新增列表数据时表单校验功能正常: 但是在新增之后再去编辑数据时,表单校验却失效了,甚至阻塞了后续的代码执行,控 ...

  3. C#Winform使用扩展方法自定义富文本框(RichTextBox)字体颜色

    在利用C#开发Winform应用程序的时候,我们有可能使用RichTextBox来实现实时显示应用程序日志的功能,日志又分为:一般消息,警告提示 和错误等类别.为了更好地区分不同类型的日志,我们需要使 ...

  4. jquery.validate.js默认配置,jquery.validate.js自定义提示信息

    jquery.validate.js默认配置,jquery.validate.js自定义提示信息 配置jQuery.validator默认的处理方法 >>>>>>& ...

  5. validate方法配置项

    validate()方法配置项 submitHandler 通过验证后运行的函数,可以加上表单提交的方法 invalidHandler 无效表单提交后运行的函数 ignore 对某些元素不进行验证 r ...

  6. ASP.NET MVC异步验证是如何工作的01,jQuery的验证方式、错误信息提示、validate方法的背后

    ASP.NET MVC借助jQuery的验证机制,提供了一套从客户端到服务端异步验证的解决方案,通常情况下,用起来相当方便.但面对一些相对特殊的情况,可能会遇到验证失效的场景,比如在使用ajax动态异 ...

  7. 解决get方法传递URL参数中文乱码问题

    [转]解决get方法传递URL参数中文乱码问题 来自:http://www.javaeye.com/topic/483158 应用一:解决tomcat下中文乱码问题(先来个简单的) 在tomcat下, ...

  8. android ANR产生原因和解决的方法

    ANR (Application Not Responding) ANR定义:在Android上,假设你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框.这个对话框称作应用程序无响应(AN ...

  9. GCC编译uboot出现(.ARM.exidx+0x0): undefined reference to `__aeabi_unwind_cpp_pr0'错误的解决的方法

    /opt/arm-2010.09/bin/../lib/gcc/arm-none-linux-gnueabi/4.5.1/armv4t/libgcc.a(_bswapsi2.o):(.ARM.exid ...

随机推荐

  1. IDEA强制清除Maven缓存

    目录 重新导入依赖的常见方式 存在的问题 彻底清除IDEA缓存的方式 重新导入依赖的常见方式 下面图中的刷新按钮,在我的机器上,并不能每次都正确导入pom.xml中写的依赖项,而是导入之前pom.xm ...

  2. win10 system guard运行时监视器,关闭服务

    这个服务,内存占用了高达21%,造成工作电脑运行缓慢,经常卡死1min,要关闭服务,并不能直接在任务管理器“服务”这里对属性进行修改,会提示“拒绝访问”,即使修改了文件夹属性也不可以,要修改注册表方可 ...

  3. squid4

    主机上的squid一直是傻瓜型使用,yum安装.默认配置.千年不动.突然漏扫出来3.X版本不能用了,搜了下,得升4.神奇的发现centos7的源(阿里源)里面竟然最高只有3.网上搜使用yum装的也都是 ...

  4. 【转】kettle7.1资源库无法打开,找不到connect按钮的问题处理

    转自:https://www.aboutyun.com/home.php?mod=space&uid=71645&do=blog&id=3535 kettle是一个比较好用的E ...

  5. Nginx - 根据IP分配不同的访问后端

    1. 需求分析 为了在线上环境提供测试分支,规定将某IP转发到测试程序地址.如果是 ngx 直接对外,采用 real_ip 就能够做限制,但是最前端确实一个7层是负载均衡就需要研究一番了. 2. 实践 ...

  6. myeclipse An internal error occurred during: "Initialize metrics".

    重新安装的myeclipse,在打开的时候弹出:    An internal error occurred during: "Initialize metrics". com/g ...

  7. lnmp卸载删除多余的php版本

    /etc/init.d/php-fpm5.3 stoprm -rf /usr/local/php5.3rm -f /etc/init.d/php-fpm5.3rm -f /usr/local/ngin ...

  8. java 正则 replace 忽略大小写

    String description = model.getDescription(); if (!"".equals(description)) { //replace(/\&l ...

  9. 小甲鱼汇编语言学习笔记——day02

    1.8086CPU不支持将数据直接送入段寄存器,需要按照下面方式:数据——>通用寄存器——>段寄存器. 2.mov指令的几种形式: mov 寄存器,数据 mov 寄存器,寄存器 mov 寄 ...

  10. python读取excel数据并以第一行标题加内容组成字典格式返回

    excel结构如图所示: 代码: import xlrd ''' 通用获取excel数据 @:param path excel文件路径 @:param sheet_name excel文件里面shee ...