Laravel 5.8捕获Validation Exception无法显示具体错误信息问题
解决Laravel 5.8中Validation Exception无法返回具体错误信息的问题
我看你现在的问题是捕获到ValidationException后,只能拿到通用的"the given data is invalid."提示,而拿不到具体的字段错误详情对吧?其实这个问题很容易解决,关键是用对ValidationException实例的方法。
你之前用$e->getMessage()获取的是异常的通用描述,而Laravel的ValidationException本身已经封装了所有具体的验证错误信息,只需要调用$e->errors()方法就能拿到你想要的结构化错误数组。
直接修改catch块里的代码就行,把$e->getMessage()换成$e->errors():
$attr = $request->data['attributes']; $validator = Validator::make($attr,[ 'nama' => 'required|string', 'scope' => 'required|string' ]); try{ if($validator->fails()){ throw new ValidationException($validator); } }catch(ValidationException $e){ return response()->json([ 'status'=> 'error', 'code' => 400, 'detail' => $e->errors() // 这里替换成errors()方法 ], 400); }
这样返回的detail字段就会是你预期的格式,比如当scope字段为空时,会返回:
{ "status": "error", "code": 400, "detail": { "scope": [ "Scope field is required" ] } }
原理很简单:当你通过throw new ValidationException($validator)抛出异常时,ValidationException会自动把验证器的错误信息存起来,errors()方法就是专门用来获取这些具体错误的接口,和你之前用的$validator->errors()->getMessages()返回的结构完全一致。
内容的提问来源于stack exchange,提问作者Mamen
相关产品推荐
相关产品推荐

