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

Laravel自定义Form Request实例化时跳过验证的问题及解决

Laravel自定义Form Request手动实例化时验证失效的解决

问题场景

我在Laravel中创建了包含授权逻辑和验证规则的自定义Form Request(CustomFormRequest):

  • 通过依赖注入方式将其传入CustomClass时,Laravel会自动执行验证,失败则返回422错误;
  • 手动实例化CustomRequest并设置请求方法、添加数据后传入CustomClass时,Laravel会跳过验证流程,导致无效数据被写入数据库。

尝试过的无效方案

曾使用$request->validate($request->rules())进行手动验证,但触发了ERR_TOO_MANY_REDIRECTS错误。

解决方法

感谢@matthew-bradley的思路,调整代码后解决了问题:

原错误代码

$data = [...];
$validator = Validator::make($data, (new CustomRequest())->rules());

修改后代码

$data = [...]; 
$request = new CustomRequest();
$request->setMethod('POST');
$request->request->add($data);
$validator = Validator::make($data, $request->rules());

原因分析

直接调用(new CustomRequest())->rules()时,CustomRequest的rules方法中$this->request->get(...)无法获取到传入的数据,而我的自定义验证规则(CustomRule)需要依赖这些数据完成校验,因此必须先实例化请求对象并填充数据,再调用其rules方法。

验证结果处理

最后添加验证失败的响应逻辑:

if($validator->fails()) { 
   response()->json(['errors' => $validator->messages()->getMessages()], 422)->send();
   die;
} else {
   new CustomClass($request);
};

内容的提问来源于stack exchange,提问作者Erős Tamás Mihály

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 10:47:04