美文网首页
laravel 使用 request 类验证表单,只返回 500

laravel 使用 request 类验证表单,只返回 500

作者: wj_39ed | 来源:发表于2020-08-19 09:14 被阅读0次

    laravel 使用 request 类验证表单时,不返回具体字段错误信息和错误状态码422,只返回 500错误 The given data was invalid

    这是 laravel 没有对 validateException 进行具体处理,而是直接抛出500错误和上面的信息,在后续的处理中使用 getmessage() 已经获取不到错误信息。这类信息只能通过一下方法获取

    $e->validator->errors()->first(),
    
    • 解决方法1
      在 Exception/handler 的render()进行异常渲染,自定义返回的异常
    if ($e instanceof ValidationException){
                //request类验证异常时返回具体信息,而不是The given data was invalid 500异常
                //这类异常信息用getMessage()获取不到
                //dd($e->validator->errors()->first());
                return response()->json([
                    'message' => $e->validator->errors()->first(),
                    'errors' => $e->validator->getMessageBag(),
                    'code' => 422,
                    'success' => false,
                    'exception' => get_class($e),
                    'file' => $e->getFile(),
                    'line' => $e->getLine(),
                    'trace' => collect($e->getTrace())->map(function ($trace) {
                        return Arr::except($trace, ['args']);})
                    ], 422);
            }
    
    • 解决方法2
      使用 dingo/api
      项目引入 dingo/api 后,在 BaseFormRequest 类中继承 dingo 的 formRequest
    //use Illuminate\Foundation\Http\FormRequest;
    //改成 dingo 的 FormRequest
    

    异常还是自己重新定义一下,方便调试

    相关文章

      网友评论

          本文标题:laravel 使用 request 类验证表单,只返回 500

          本文链接:https://www.haomeiwen.com/subject/fwfrjktx.html