【发布时间】:2021-05-17 17:30:11
【问题描述】:
我正在尝试验证以下 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 版。 任何人都知道如何做到这一点,尊重/验证?(我已经知道如何手动做到这一点)。谢谢。
【问题讨论】:
-
嗨!既然我看到了
$this->validator->validate,您是否使用其他库/中间件进行此验证? -
我只是将验证器初始化为构造函数上的全局变量。
标签: php validation http respect-validation