You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:30:11