Php 是否验证有关/验证的相对数组(映射)的数组?

Php 是否验证有关/验证的相对数组(映射)的数组?,php,validation,http,respect-validation,Php,Validation,Http,Respect Validation,我正在尝试验证以下json: { "variants": [ { "variant_code": "1", "price": 12, "discount": 12, "height": 1, "longitude":

我正在尝试验证以下json:

{
    "variants": [
        {
            "variant_code": "1",
            "price": 12,
            "discount": 12,
            "height": 1,
            "longitude": 1,
            "width": 1,
            "weight": 1,
            "package_height": 1,
            "package_longitude": 1,
            "package_width": 1,
            "package_weight": 11,
            "stock": 1
        },
        {
            "variant_code": "2",
            "price": 12,
            "discount": 12,
            "height": 1,
            "longitude": 1,
            "width": 1,
            "weight": 1,
            "package_height": 1,
            "package_longitude": 1,
            "package_width": 1,
            "package_weight": 11,
            "stock": 1
        },
        {
            "variant_code": "3",
            "price": 12,
            "discount": 12,
            "height": 1,
            "longitude": 1,
            "width": 1,
            "weight": 1,
            "package_height": 1,
            "package_longitude": 1,
            "package_width": 1,
            "package_weight": 11,
            "stock": 1
        }
    ]
}
我找不到验证它的方法,我尝试了以下方法:

$this->validator->validate(
            $request, [
                        "variants" => v::arrayVal()->each(
                            v::key("variant_code", v::stringVal()->notEmpty()->length(1, 100)),
                            v::key("stock", v::intVal()->notOptional()),
                            v::key("price", v::numericVal()->notEmpty()),
                            v::key("discount", v::numericVal()->notEmpty()),
                            v::key("weight", v::numericVal()->notEmpty()),
                            v::key("width", v::numericVal()->notEmpty()),
                            v::key("height", v::numericVal()->notEmpty()),
                            v::key("longitude", v::numericVal()->notEmpty()),
                            v::key("package_weight", v::numericVal()->notEmpty()),
                            v::key("package_width", v::numericVal()->notEmpty()),
                            v::key("package_longitude", v::numericVal()->notEmpty()),
                            v::key("package_height", v::numericVal()->notEmpty())
                        )
                    ]
        );
但它只是验证每个相对数组的第一个键“variant_code”。 我也试过:

$this->validator->validate(
            $request, [
                        "variants" => v::arrayVal()->each(
                            v::keySet(
                                v::key("variant_code", v::stringVal()->notEmpty()->length(1, 100)),
                                v::key("stock", v::intVal()->notOptional()),
                                v::key("price", v::numericVal()->notEmpty()),
                                v::key("discount", v::numericVal()->notEmpty()),
                                v::key("weight", v::numericVal()->notEmpty()),
                                v::key("width", v::numericVal()->notEmpty()),
                                v::key("height", v::numericVal()->notEmpty()),
                                v::key("longitude", v::numericVal()->notEmpty()),
                                v::key("package_weight", v::numericVal()->notEmpty()),
                                v::key("package_width", v::numericVal()->notEmpty()),
                                v::key("package_longitude", v::numericVal()->notEmpty()),
                                v::key("package_height", v::numericVal()->notEmpty())
                            )
                        )
                    ]
        );
但它会抛出以下错误:

{
        "variants": {
            "variants": "Must have keys `{ \"variant_code\", \"stock\", \"price\", \"discount\", ... }`"
        }
我也尝试过许多其他方法,但都没有成功。 我正在使用尊重/验证2.0版和PHP 7.4版。
任何人都知道如何做,尊重/验证?(我已经知道如何手动完成)。谢谢。

这里的问题是您的规则要求的
product\u image\u id
密钥,但它不存在于您尝试验证的数据中

我尝试的是:

$string=file\u get\u contents(uuu DIR\uuuu../data.json);
$json=json_decode($string,true);
函数验证($data){
v::arrayVal()->每个(
v::键集(
v::key(“variant_code”,v::stringVal()->notEmpty()->length(1100)),
v::key(“product_image_id”,v::optional(v::intVal()),//data.json文件中缺少此键
v::key(“stock”,v::intVal()->notOptional()),
v::key(“price”,v::numericVal()->notEmpty()),
v::key(“折扣”,v::numericVal()->notEmpty()),
v::key(“weight”,v::numericVal()->notEmpty()),
v::key(“width”,v::numericVal()->notEmpty()),
v::key(“height”,v::numericVal()->notEmpty()),
v::key(“经度”,v::numericVal()->notEmpty()),
v::key(“包装重量”,v::numericVal()->notEmpty()),
v::key(“包的宽度”,v::numericVal()->notEmpty()),
v::key(“包经度”,v::numericVal()->notEmpty()),
v::key(“包的高度”,v::numericVal()->notEmpty())
)
)->断言(数据);
}
试一试{
/*
$array=[
[
“变体代码”=>“qwerty”
]
];
$result=validate($array);
*/
验证($json[“变体]);
回声(“确认正常”);
}捕获(NestedValidationException$exception){
echo($exception->getFullMessage());
echo(“验证错误”);
}
data.json
文件:

{
“变体”:[
{
“变体代码”:“1”,
“价格”:12,
“折扣”:12,
“高度”:1,
“经度”:1,
“宽度”:1,
“重量”:1,
“包装高度”:1,
“包经度”:1,
“包装宽度”:1,
“包装重量”:11,
“股票”:1
},
{
“变体代码”:“2”,
“价格”:12,
“折扣”:12,
“高度”:1,
“经度”:1,
“宽度”:1,
“重量”:1,
“包装高度”:1,
“包经度”:1,
“包装宽度”:1,
“包装重量”:11,
“股票”:1
},
{
“变体代码”:“3”,
“价格”:12,
“折扣”:12,
“高度”:1,
“经度”:1,
“宽度”:1,
“重量”:1,
“包装高度”:1,
“包经度”:1,
“包装宽度”:1,
“包装重量”:11,
“股票”:1
}
]
}

您可以查看我的完整代码。

您好!由于我看到
$this->validator->validate
,您是否正在使用其他库/中间件进行此验证?我只是将验证器初始化为构造函数上的全局变量。我复制/粘贴时出错,即使我删除了密钥,它也不起作用,请检查错误是否表示缺少更多的密钥,不仅仅是产品图片id。你确定你的代码有效吗?@FrancescArolas,是的,我认为这是预期的行为,因为
键集
是一组规则。你可以检查一下。