Laravel 10中Required验证规则失效问题求助
我使用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数据
排查与解决思路
修正JSON语法错误
你的请求体末尾多了一个冗余逗号("confirmPassword": "password",),这会导致JSON解析失败,Laravel无法正确读取请求参数。删除该逗号即可。确认请求头Content-Type正确性
确保Postman的请求头中Content-Type严格设置为application/json,Laravel默认仅解析该类型的请求体到$request对象中。若类型不匹配,框架无法识别JSON数据,会判定字段缺失。检查BaseRequest的影响
由于SignUpRequest继承自BaseRequest,需确认BaseRequest中是否重写了validationData()、prepareForValidation()等方法,这些自定义逻辑可能干扰了请求参数的正常获取。临时调试验证
暂时跳过验证规则,直接输出请求原始内容,确认Laravel是否接收到参数:public function signUp(Request $request) { dd($request->all(), $request->getContent()); }若
$request->all()返回空数组,但$request->getContent()能看到JSON内容,说明是JSON解析失败或Content-Type配置问题。
内容的提问来源于stack exchange,提问作者Djebarra Rabah Abderrazak

