【发布时间】:2023-04-05 11:25:01
【问题描述】:
我的 Laravel 后端接收到一个 JSON 转换的 Javascript 数组并将其解码为以下 php 数组:
dd($cart) 已编辑的键已更改
array:4 [▼
"personcount" => 2
"person1" => array:2 [▼
"Customer" => array:2 [▶]
"Items" => array:5 [▼
"key1" => 0
"key2" => 0
"key3" => 0
"key4" => 0
"key5" => 1
]
]
"person2" => array:2 [▼
"Customer" => array:2 [▶]
"Items" => array:5 [▶]
]
]
我创建了一个过滤器中间件,它应该验证给定的数组并在失败时重定向回来。
Filter.php EDITED 添加了新的(不工作的)验证规则方法
$cart = json_decode($request->input('cart'), true);
$validation_rules = [];
$TotalItemCount = 0;
for ($i = 1; $i <= $person_count; $i++) {
foreach ($cart[$i]["Items"] as $Item => $ItemCount) {
$TotalItemCount += $ItemCount;
}
$validation_rules += [
"person$i.Customer.FirstName" => "required|string|min:2|max:255",
"person$i.Customer.LastName" => "required|string|min:2|max:255",
"person$i.Items.*" => "required|numeric",
"person$i.Items" => ['required', 'array',
Rule::in(["Key1", "Items"]),
],
];
}
$validated_input = Validator::make($cart, $validation_rules);
验证器似乎忽略了 $i.Items 验证规则。 我什至将 size:5 更改为 size:6 必须 100% 触发错误,因为给定的 Item Array 始终只包含 5 个元素。
此外,我尝试验证数组键:
"$i.Items" => "required|array:key1,key2,key3"
它也根本没有开火。我希望所有密钥都是必需的。 名/姓规则适用。
我很高兴收到建议。
【问题讨论】:
-
$v = Validator::make([2, ['items' => [2]]], ['1.items.*' => 'integer']);在我的机器上工作,您对 $i 的使用一定有问题,或者 items 数组的格式很奇怪,但这不包括在问题中。
-
很抱歉我无法添加答案(我正在打电话),但是您可以使用 Laravel 验证器来验证数组,而无需遍历每个条目,阅读 this part,您应该可以执行
*.items或任何其他键。 -
到目前为止,我认为问题在于使用非键控数组进行输入,因此我认为需要这个解决方案。在完美的世界里,我会改变这种结构。
-
@mrhn 我不明白你的功能。此外,我更改了数组,但我仍然不知道如何验证它们的键。
-
你能显示哪些项目包含吗?
标签: laravel validation laravel-8 laravel-validation