我正在尝试验证以下 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\", ... }`"
}
我也尝试了许多其他方法,但均未成功。我正在使用 Respect/Validation 2.0 版和 PHP 7.4 版。任何人都知道如何做到这一点,尊重/验证?(我已经知道如何手动做到这一点)。谢谢你。