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

Laravel 9嵌套数组验证失败求助

Laravel 9嵌套输入数组验证失败问题解决

问题出在表单输入的name属性写法上——你给amount嵌套字段加了多余的单引号,导致Laravel无法正确解析嵌套数组结构。

错误原因

你的表单输入中,amount相关字段的name写成了amount[0]['major']这种带单引号的格式,这会让请求载荷里的键变成amount[0]['major'],而Laravel期望的嵌套数组键是不带单引号的amount[0][major]。这种情况下,Laravel无法识别amount.0是一个包含major/minor/currency的数组,反而会把amount[0]['major']当成一个独立的扁平键,所以验证规则里的amount.*.major根本匹配不到对应字段,进而抛出"amount.0必须是数组"和子字段必填的错误。

解决方案

修改表单中amount相关字段的name属性,去掉单引号:

<select name="interval[0]" required="">
<input type="number" name="interval_quantity[0]" required="">
<input type="text" name="amount[0][major]" required="">
<input type="text" name="amount[0][minor]" required="">
<select name="amount[0][currency]" required="">

修改后,请求载荷会变成正确的嵌套数组格式:

interval[0]: yearly
interval_quantity[0]: 1
amount[0][major]: 30
amount[0][minor]: 00
amount[0][currency]: USD

验证规则说明

你当前的验证规则是完全正确的,不需要修改:

'interval' => ['required', 'array'],
'interval.*' => ['required', 'string', 'max:30'],
'interval_quantity' => ['required', 'array'],
'interval_quantity.*' => ['required', 'integer'],
'amount' => ['required', 'array'],
'amount.*' => ['required', 'array:major,minor,currency'],
'amount.*.major' => ['required', 'integer'],
'amount.*.minor' => ['required', 'integer'],
'amount.*.currency' =>['required', 'string', 'max:3']

只要表单输入的name格式正确,这个规则就能正常验证嵌套的amount数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 01:20:21