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

Laravel必填验证导致校验失败问题求助

问题

验证从JSON文件获取的数据时,移除required规则校验能通过,但添加该规则后就失败。确认所有待校验字段都不为空,却找不到问题所在,有没有明显遗漏的点?

控制器代码

// START: Validate request
$validator =  Validator::make($request->all(), [
    'results.*.status.*.name' => 'required|max:255',
    'results.*.error.*.name' => 'required',
    'results.*.messageId' => 'required',
    'results.*.doneAt' => 'required|date',
    'results.*.smsCount' => 'required|numeric',
    'results.*.sentAt' => 'required',
    'results.*.callbackData' => 'required',
]); // The "required" is causing the validation to fail

if ($validator->fails()) {
    dd('fail');
} else {
    dd('pass');
}
// END: Validate request

JSON数据

{
 "results": [
  {
   "bulkId": "BULK-ID-123-xyz",
   "price": {
    "pricePerMessage": 0.0185,
    "currency": "GBP"
    },
    "status": {
     "id": 5,
     "groupId": 3,
    "groupName": "DELIVERED",
      "name": "DELIVERED_TO_HANDSET",
      "description": "Message delivered to handset"
    },
    "error": {
      "id": 0,
      "name": "NO_ERROR",
      "description": "No Error",
      "groupId": 0,
      "groupName": "OK",
      "permanent": false
    },
    "messageId": "MESSAGE_UUID",
    "doneAt": "2022-11-21T17:11:16.661+0000",
    "smsCount": 1,
    "sentAt": "2022-11-21T17:11:12.129+0000",
    "callbackData": "CAMPAIGN_ID",
     "to": "447572554668"
    }
  ]
}
解决方案

问题出在验证规则的字段路径错误:

你写的results.*.status.*.name和results.*.error.*.name里,status和error是单个对象,不是数组,中间的*完全多余。这个*会让验证器去寻找status下的数组元素,但实际不存在,所以验证器判定name字段缺失,触发required规则失败。

把规则里的这两行改成下面这样就可以了:

'results.*.status.name' => 'required|max:255',
'results.*.error.name' => 'required',

之所以移除required能通过,是因为其他规则(比如max:255)在字段路径错误找不到值时,不会强制要求字段必须存在,而required会严格校验字段的存在性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 02:45:35