Laravel动态person数组Items节点验证规则不生效问题求助
问题原因
- 验证规则键名写错:你测试的
$i.Items漏了person前缀,和实际数组结构的person1.Items不匹配,规则自然不会触发 Rule::in(["Key1", "Items"])用法完全错误:这个规则是验证Items数组的元素值是否在给定列表内,不是用来验证数组键的,对你的需求完全无用- 注意大小写匹配:你数组里的键是小写
key1,规则里写大写Key1也会导致匹配失效
修复方案
直接按你的需求调整验证规则即可,要验证Items数组包含指定键、长度固定、每个值都是数字,写法如下:
$cart = json_decode($request->input('cart'), true); // 先取人数,避免变量未定义 $person_count = $cart['personcount'] ?? 0; $validation_rules = []; for ($i = 1; $i <= $person_count; $i++) { $validation_rules += [ "person$i.Customer.FirstName" => "required|string|min:2|max:255", "person$i.Customer.LastName" => "required|string|min:2|max:255", // 验证Items是数组,必须包含key1到key5五个键,长度为5 "person$i.Items" => "required|array:key1,key2,key3,key4,key5|size:5", // 验证每个键对应的值是数字 "person$i.Items.*" => "required|numeric", ]; } $validator = Validator::make($cart, $validation_rules); // 别忘了加验证失败的判断 if ($validator->fails()) { // 你的重定向逻辑 return redirect()->back()->withErrors($validator)->withInput(); }
如果需要限制Items的键只能是你指定的5个,不能多传其他键,保留size:5即可。修改后你可以测试把size:5改成size:6,就会正常触发验证错误。
内容的提问来源于stack exchange,提问作者dogma
相关产品推荐
相关产品推荐

