Laravel Livewire如何验证数组模型字段?validateOnly无效问题
解决Laravel Livewire验证关联数组字段的问题
你的array字段属于单个关联数组(而非数组列表),所以array.*这种通配符写法不适用(它针对的是array[0].quantity这类数组项的场景)。以下是几种可行的验证方式:
方式1:一次性验证array下的所有子字段
直接把array的所有子字段作为数组传给validateOnly:
$this->validateOnly([ 'array.quantity', 'array.name', 'array.description', 'array.price', ]);
方式2:提取array相关规则单独验证
从已定义的$rules中筛选出array.开头的规则,再执行验证:
$arrayValidationRules = collect($this->rules) ->filter(fn($rule, $key) => str_starts_with($key, 'array.')) ->toArray(); $this->validate($arrayValidationRules);
方式3:直接指定array子字段的规则验证
如果不想依赖已有的$rules,可以直接写出array子字段的规则进行验证:
$this->validate([ 'array.quantity' => 'required|integer|min:1', 'array.name' => 'required|string|max:500', 'array.description' => 'required|string|max:500', 'array.price' => 'required|numeric|min:1', ]);
补充说明
如果你的array是数组列表(比如array[0].quantity、array[1].quantity这种结构),那才需要用array.*.quantity这类通配符规则,但你的场景里array是单个关联数组,直接验证其下的具体字段即可。
内容的提问来源于stack exchange,提问作者Christian Wagner
相关产品推荐
相关产品推荐

