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

如何修改PHP/Laravel中request validate的返回状态码?

Laravel 修改 validate() 默认验证错误状态码为 400 的三种实现方法

方法一:自定义请求类(Form Request)重写验证失败逻辑

如果项目中习惯用自定义请求类做验证,可直接在请求类里重写failedValidation方法来修改状态码:

  1. 生成自定义请求类(若未创建):
php artisan make:request StorePostRequest
  1. 在app/Http/Requests/StorePostRequest.php中重写方法:
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Validation\ValidationException;

protected function failedValidation(Validator $validator)
{
    $exception = ValidationException::withMessages(
        $validator->errors()->toArray()
    );

    $exception->status = 400; // 将默认422改为400
    throw $exception;
}
  1. 控制器中使用该请求类替代原生validate():
public function store(StorePostRequest $request)
{
    // 验证通过后直接处理业务
    $post = Post::create($request->validated());
    return response()->json($post);
}

方法二:全局统一修改验证异常状态码

若希望所有validate()调用都返回400状态码,可在全局异常处理器中配置:

在app/Exceptions/Handler.php的register方法中添加异常处理逻辑:

use Illuminate\Validation\ValidationException;

public function register()
{
    $this->renderable(function (ValidationException $e, $request) {
        // 针对JSON请求修改状态码,可根据需求调整判断条件
        if ($request->expectsJson()) {
            return response()->json([
                'message' => $e->getMessage(),
                'errors' => $e->errors(),
            ], 400);
        }
    });
}

方法三:扩展Request类重写validate方法

不想用自定义请求类或全局配置的话,可扩展Laravel基础Request类,重写validate方法:

  1. 创建自定义BaseRequest类:
// app/Http/Requests/BaseRequest.php
namespace App\Http\Requests;

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

class BaseRequest extends FormRequest
{
    public function validate(array $rules, ...$params)
    {
        try {
            parent::validate($rules, ...$params);
        } catch (ValidationException $e) {
            $e->status = 400;
            throw $e;
        }
    }
}
  1. 控制器中使用该自定义Request类:
use App\Http\Requests\BaseRequest;

public function store(BaseRequest $request)
{
    $request->validate([
        'title' => 'required|unique:posts'
    ]);

    // 业务逻辑处理...
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 04:09:26