Laravel自定义错误消息

在Laravel验证请求时出现错误,默认会返回如下的错误:

可以看到JSO结构中的message为The given data was invalid.而并非是我们具体自定义的错误,这在用户端显得非常不友好。

在谷歌找了半天都是教你如何通过语言包的形式修改为本地化的语言,实质上和我们的需求有些出入,并不能获取的具体的错误内容。

最终,在laravel的issue中找到一则帖子:https://github.com/laravel/framework/issues/21059

其实我很同意这个帖子主题,和我遇到的情况一致,但被关闭了。

文中有一些其他人给出的解决思路,如下:

修改文件:app/Exceptions/Handler.php

    /**
* Render an exception into an HTTP response.
*
* @param \Illuminate\Http\Request $request
* @param \Exception $exception
* @return \Symfony\Component\HttpFoundation\Response
*
* @throws \Exception
*/
public function render($request, Exception $exception)
{
if ($exception instanceof ValidationException && $request->expectsJson())
return response()->json(['message' => $exception->validator->errors()->first(), 'errors' => $exception->validator->getMessageBag()], 422);
return parent::render($request, $exception);
}

通过修改render方法得以实现对请求异常时返回的json内容。

如果想更改为其他的json结构,也可以在此进行修改。

其实如果只是想更改JSON结构可以通过重写invalidJson实现,依然在这个文件里:

    /**
* Convert a validation exception into a JSON response.
*
* @param \Illuminate\Http\Request $request
* @param \Illuminate\Validation\ValidationException $exception
* @return \Illuminate\Http\JsonResponse
*/
protected function invalidJson($request, ValidationException $exception)
{
return response(eeData($exception->getMessage(), $exception->status));
}

其中的eeData为我自己自定义的JSON结构函数。

Laravel自定义JSON错误消息 The given data was invalid.的更多相关文章

  1. laravel自定义返回错误方法

    返回视图传递错误信息 function withInfoErr($msg){ return back()->with('error',$msg); } 返回视图提示消息 function wit ...

  2. Laravel 5.5 FormRequest 自定义错误消息 postman调试时X-Requested-With设为XMLHttpRequest

    Laravel 5.5 FormRequest 自定义错误消息 使用FormRequest进行表单验证,就不用让验证逻辑和控制器里面的逻辑都混在一起.但在使用的时候呢,发现json错误返回的数据,与我 ...

  3. laravel的Validation检索验证错误消息

    基本用法 处理错误消息 错误消息和视图 可用的验证规则 有条件地添加规则 自定义错误消息 自定义验证规则 基本用法 Laravel提供了一个简单.方便的工具,用于验证数据并通过validation类检 ...

  4. Kettle解析JSON错误,We MUST have the same number of values for all paths,We can not find and data with path [$.

    最近公司要从聚石塔上抽取数据,其中有JSON格式数据,所以学习一下Kettle解析JSON,碰到小小问题,记录一下: (1) 2015/07/15 15:22:48 - trade_detail.0 ...

  5. laravel 自定义验证 Validator::extend

    laravel 自定义验证 $messages = [ 'name.integer' => '名字不能为整型', 'name.max' => '长度不能超过5', ]; public st ...

  6. laravel中的错误与日志

    日志 laravel中的日志是基于monolog而封装的.laravel在它上面做了几个事情: 把monolog中的addInfo等函数简化成为了info这样的函数 增加了useFiles和useDa ...

  7. 编译器错误消息: CS0016: 未能写入输出文件

    “/”应用程序中的服务器错误. 编译错误 说明: 在编译向该请求提供服务所需资源的过程中出现错误.请检查下列特定错误详细信息并适当地修改源代码. 编译器错误消息: CS0016: 未能写入输出文件“c ...

  8. Asp.Net Core 轻松学-实现跨平台的自定义Json数据包

    前言     在前后端分离的业务开发中,我们总是需要返回各种各样的数据包格式,一个良好的 json 格式数据包是我们一贯奉行的原则,下面就利用 Json.Net 来做一个简单具有跨平台的序列化数据包实 ...

  9. 转: Laravel 自定义公共函数的引入

    来源:Laravel 自定义公共函数的引入 背景习惯了 使用 ThinkPHP 框架,有一个公共方法类在代码编写上会快捷很多,所以有必要在此进行配置一番.测试框架:Laravel 5.5步骤指导1. ...

  10. flask 在模板中渲染错误消息

    在模板中渲染错误消息 如果form.valicate_on_submit()返回False,说明验证没有通过,对于没有验证通过的字段,WTForms会把错误信息添加到表单类的errors属性中,这是一 ...

随机推荐

  1. Reactor 模式线程模型

    根据Reactor的数据量和处理资源池线程数量,可以分为3钟典型实现 单Reactor单线程 单Reactor 多线程 主从Reactor 多线程

  2. pat乙级1013数素数

    #include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> int ...

  3. css初始化、background属性、jquery选择器模糊匹配、canvas

    1.css初始化 2.background 3.jquery选择器模糊匹配 4.canvas画多边形 5.通过css设置canvas背景图片 6.js动态生成变量名

  4. zabbix-proxy部署笔记

    前提:配置好yum源 1. 安装mariadb-server systemctl start mariadb.service systemctl enable mariadb.service mysq ...

  5. SQL SERVER 多表联合修改

    sql server中有时候会用到多表联合修改,下面是简单的多表修改的例子 UPDATE a SET a.a1 = b.b1 , a.a2 = b.b2 FROM A a, B b WHERE a.a ...

  6. 【Java】无法将java.util.LinkedHashMap强制转换为X

    JsonJack:无法将java.util.LinkedHashMap强制转换为X 1. 概述 Jackson是一个广泛使用的Java库,它使可以方便地对JSON或XML进行序列化/反序列化.有时,当 ...

  7. (Jmeter笔记)jmeter连接数据库(mysql)

    下载mysql连接驱动 地址:https://dev.mysql.com/downloads/connector/j/ ****把mysql连接驱动放在Jmeter/lib目录下**** >&g ...

  8. 【Java】RocketMQ

    <dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-cli ...

  9. 学习lua-05,io.open 读取输出修改文件,以及io.read的参数运用,读所有,读一行多行

    -- 以附加的方式打开只写文件.若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留.(EOF符保留) file = io.open("D:\\Pr ...

  10. 合并B站video.m4s和audio.m4s

    ffmpeg -i D:\a\video.m4s -i D:\a\audio.m4s -codec copy D:\a\a.mp4