技术日志 - API 中使用 Laravel form 表单验证抛出异常如何返回 API 格式数据
laraevl 提供的 表单验证确实好用,配置简单,节省时间。但是对接口的支持不是很好,通常,我们在进行接口请求,验证失败的时候,需要返回固定格式的 json 错误信息,这时候要怎么处理呢?
首先,我们要知道 Laravel 异常的全局捕获是在:app/Exceptions/Handler.php 文件,知道这点的话就很简单了,既然所有异常的抛出都会经过这个 Handler,那我们在这里处理下就可以了。下面上代码:
在 app/Exceptions/Handler.php render方法中添加以下代码:
这里感谢老哥 di-gua 指出的更好的写法;
## 验证错误
if($request->is("api/*")){// 我们仅仅处理 api的异常,所以这里要排除下其他前缀路由
if($exception instanceof ValidationException){//如果抛出的异常是 ValidationException 的实例,我们就可以确定该异常是表单验证异常
## 下面是你需要包装的数据
$result = [
"code"=>1,
"msg" => $exception->validator->errors()->first() # 更好的获取错误的方法
##"msg"=>array_values($exception->errors())[0][0],//这里 ValidationException 异常的格式通常是数组的形式,如果不确定如何取值可以打印下看下结构
"data"=>[]
];
return response()->json($result);
}
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
获取错误信息那里这么写更优雅一些