数组内部的Laravel复杂验证规则

时间:2020-05-20 08:22:41

标签: php laravel validation

我写了一个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内部的验证才有效。

谢谢。

致以最诚挚的问候 马丁

1 个答案:

答案 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'))],

它工作正常:-)