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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:36:04