Laravel 验证仅对其同级数组元素不同

问题描述 投票:0回答:1

我们有这个验证码:

$data = [
    [1, 2, 3],
    [3, 4, 5]
];

$validator = \Validator::make([
    "bla" => $data,
], [
    'bla'           => 'required|array', 
    'bla.*'         => 'required|array|max:5|min:1',
    'bla.*.*'       => 'required|integer|distinct',
]);

if ($validator->fails()) {...}

如您所见,我们在内部数组上添加了

distinct
。目前,此代码出现错误:

The bla.0.2 field has a duplicate value.
The bla.1.0 field has a duplicate value.

我们想要实现的只是检查内部数组是否有重复项。在这个例子中,由于所有内部数组都是唯一的,所以它应该通过验证。

distinct
似乎检查了一切。包括其他内部数组。

示例:

这应该会过去:

$data = [
    [1, 2, 3],
    [3, 4, 5]
];

这不应该通过,因为第一个内部数组上有 2 个 4。

$data = [
    [4, 4, 3],
    [3, 8, 5]
];

任何帮助将不胜感激。

php laravel laravel-validation
1个回答
0
投票

您可以使用“after”来检查每个内部数组中的重复项,例如

$validator->after(function ($validator) use ($data) {
        foreach ($data as $index => $innerArray) {
            if (count($innerArray) !== count(array_unique($innerArray))) {
                $validator->errors()->add("bla.$index", "The elements in bla.$index must be distinct.");
            }
       }
  });
© www.soinside.com 2019 - 2024. All rights reserved.