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

Laravel 10中Required验证规则失效问题求助

Laravel API 注册接口必填字段验证异常问题

我使用Laravel框架开发API,定义路由如下:

Route::controller(AuthenticationController::class)->group(function () {
    Route::post('/signUp', 'signUp');
});

AuthenticationController的signUp方法:

public function signUp(SignUpRequest $request)
{
    dd($request);
}

SignUpRequest验证规则代码:

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class SignUpRequest extends BaseRequest
{
    /**
     * 判断用户是否有权限发起该请求
     */
    public function authorize(): bool
    {
        return true;
    }

    /**
     * 获取请求对应的验证规则
     *
     * @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array|string>
     */
    public function rules(): array
    {
        return [
            "email" => "required|email",
            "firstname" => "required|string|max:50",
            "lastname" => "required|string|max:50",
            "image" => "string|image",
            "password" => "required|string|min:8|max:100",
            "confirmPassword" => "required|string|same:password"
        ];
    }
}

用Postman请求该路由时,请求体已包含所有必填字段,却收到字段缺失的错误提示:
请求体内容:

{
    "email": "example@gmail.com",
    "firstname": "fname",
    "image": null,
    "lastname": "lname",
    "password": "password",
    "confirmPassword": "password"
}

返回的错误信息:

{
    "success": false,
    "message": "The email field is required.",
    "errors": {
        "email": [
            "The email field is required."
        ],
        "firstname": [
            "The firstname field is required."
        ],
        "lastname": [
            "The lastname field is required."
        ],
        "password": [
            "The password field is required."
        ],
        "confirmPassword": [
            "The confirm password field is required."
        ]
    }
}

移除required规则后错误消失,但无法定位问题根源,寻求解决办法。

补充说明:Postman配置情况:

  • 请求头已设置Content-Type: application/json
  • 请求体使用Raw格式,内容为上述JSON数据

排查与解决思路

  1. 修正JSON语法错误
    你的请求体末尾多了一个冗余逗号("confirmPassword": "password",),这会导致JSON解析失败,Laravel无法正确读取请求参数。删除该逗号即可。

  2. 确认请求头Content-Type正确性
    确保Postman的请求头中Content-Type严格设置为application/json,Laravel默认仅解析该类型的请求体到$request对象中。若类型不匹配,框架无法识别JSON数据,会判定字段缺失。

  3. 检查BaseRequest的影响
    由于SignUpRequest继承自BaseRequest,需确认BaseRequest中是否重写了validationData()、prepareForValidation()等方法,这些自定义逻辑可能干扰了请求参数的正常获取。

  4. 临时调试验证
    暂时跳过验证规则,直接输出请求原始内容,确认Laravel是否接收到参数:

    public function signUp(Request $request)
    {
        dd($request->all(), $request->getContent());
    }
    

    若$request->all()返回空数组,但$request->getContent()能看到JSON内容,说明是JSON解析失败或Content-Type配置问题。

内容的提问来源于stack exchange,提问作者Djebarra Rabah Abderrazak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 04:40:17