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
相关产品推荐
相关产品推荐

