我写了一个API(Rest,JSON),想验证传入的请求。
API需要一个字段“ Plan”。 在此字段中,客户端有两个选择:“ o2_Plan”或“ telekom_Plan”。 其中之一是必需的。所以我的验证看起来像:
'Plan.o2_Plan' => 'required_without:Plan.telekom_Plan|array',
'Plan.telekom_Plan' => 'required_without:Plan.o2_Plan',
这很好。但是计划中还有另一个条件规则:
'Plan.o2_Plan.tariff_variation_code' => 'required_without:Plan.o2_Plan.article_id|string',
'Plan.o2_Plan.article_id' => 'sometimes|required_without:Plan.o2_Plan.tariff_variation_code|string',
这意味着您必须输入一个riff_variation_code或article_id或两者都输入。
但是,如果客户端仅传输telekom_Plan(必须这样做),则验证失败,并出现以下错误:
{
"errors": {
"Plan.o2_Plan.tariff_variation_code": [
"The tariff_variation_code field is required when article_id is not present."
],
"Plan.o2_Plan.article_id": [
"The article_id field is required when tariff_variation_code is not present."
]
}
}
如果存在o2_Plan,如何才能实现o2_Plan内部的验证才有效。
谢谢。
致以最诚挚的问候 马丁答案 0 :(得分:0)
我有以下解决方案:
已更改
db.collection.aggregate([
{
$match: {
$and: [
{
$or: [
{
recipient: "One"
},
{
sender: "One"
}
],
},
]
}
},
{
$addFields: {
conversationWith: {
$cond: {
if: {
$eq: [
"$sender",
"One"
]
},
then: "$recipient",
else: "$sender"
}
}
}
},
{
$sort: {
createdAt: -1
}
},
{
$group: {
_id: "$conversationWith",
firstMessage: {
$first: "$$ROOT"
}
}
}
])
到
'Plan.o2_Plan' => 'required_without:Plan.telekom_Plan|array',
我的o2Plan规则类如下:
'Plan.o2_Plan' => ['required_without:Plan.telekom_Plan', 'array', new o2Plan(request('Plan.o2_Plan'))],
它工作正常:-)