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

如何拦截Laravel FormRequest验证失败时自动生成的JSON响应?

当然可以通过ValidationException实现自定义JSON响应的需求,下面是两种实用的实现方式,你可以根据场景选择:

方法一:在自定义FormRequest类中重写failedValidation方法

因为你的UserStoreRequest继承了FormRequest,直接在这个类里重写验证失败的处理逻辑,就能针对该请求类单独定制响应:

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\ValidationException;

class UserStoreRequest extends FormRequest
{
    // 你的验证规则、授权逻辑...

    protected function failedValidation(\Illuminate\Contracts\Validation\Validator $validator)
    {
        // 仅针对AJAX/JSON请求返回自定义响应
        if ($this->wantsJson()) {
            $customResponse = response()->json([
                'code' => 422,
                'message' => '表单验证失败',
                'errors' => $validator->errors()->messages() // 键值对格式的错误信息,也可用all()转成数组
            ], 422);

            // 通过ValidationException绑定自定义响应后抛出
            throw (new ValidationException($validator))->response($customResponse);
        }

        // 非JSON请求走默认验证失败逻辑
        parent::failedValidation($validator);
    }
}

方法二:全局拦截ValidationException(异常处理器中统一处理)

如果希望所有验证失败的AJAX请求都返回统一格式的响应,可修改App\Exceptions\Handler类的render方法:

<?php

namespace App\Exceptions;

use Illuminate\Validation\ValidationException;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Throwable;

class Handler extends ExceptionHandler
{
    // 其他默认代码...

    public function render($request, Throwable $exception)
    {
        // 捕获AJAX/JSON请求下的ValidationException
        if ($request->wantsJson() && $exception instanceof ValidationException) {
            return response()->json([
                'code' => 422,
                'status' => 'error',
                'msg' => '提交的数据不符合要求',
                'error_details' => $exception->validator->errors()->messages()
            ], 422);
        }

        return parent::render($request, $exception);
    }
}

两种方式都基于ValidationException实现:第一种是通过它的response()方法绑定自定义响应后抛出,针对单个请求类;第二种是全局捕获该异常并返回自定义结构,覆盖所有验证场景。

内容的提问来源于stack exchange,提问作者mzhkhokhar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 21:52:08