Laravel多层嵌套数组验证报错,求正确验证方案
Laravel多层嵌套数组验证解决方案
你的问题出在验证规则的层级写法错误,导致Laravel误解了字段路径。结合你的数组结构和验证需求,正确的验证规则写法如下:
正确的验证规则
假设你是将请求中的items数组单独传入验证器,规则应写成:
public function rules() { return [ // 验证每个外层item的sender字段 '*.sender.firstName' => 'required|string|max:17', '*.sender.lastName' => 'required|string', // 验证每个外层item下嵌套items的weight.value字段 '*.items.*.weight.value' => 'required|integer', // 可根据实际需求调整类型,比如numeric ]; }
错误原因说明
你之前写的sender.*.firstName会让Laravel把sender当作数组来遍历,但实际上sender是外层items数组每个元素中的对象,并非数组。Laravel会错误地尝试遍历sender的属性(比如lastName)并寻找firstName字段,这就是为什么会出现sender.lastName.firstName is required的错误提示。
补充说明
如果你是在Request类中直接验证整个请求(而非单独传入items数组),规则需要加上外层的items前缀:
public function rules() { return [ 'items.*.sender.firstName' => 'required|string|max:17', 'items.*.sender.lastName' => 'required|string', 'items.*.items.*.weight.value' => 'required|integer', ]; }
内容的提问来源于stack exchange,提问作者Farshad
相关产品推荐
相关产品推荐

