两个字段都可以为空,但填写时只需要一个

Both fields can be empty but when filled only one required

我正在 Laravel 制作一个页面并使用表单请求进行验证。我在该页面上有 2 个代码。

  1. 优惠券代码 2) 促销代码

我想以这样一种方式设置条件,这些代码可以为空,但在填充时只需要一个。

我试过了,但没有得到正确的结果。

return [
            'coupon_code' => 'nullable|required_without:promo_code',
            'promo_code' => 'nullable|required_without:coupon_code'
        ];

使用 required if 的验证。

return [
            'coupon_code' => 'nullable|required_if:promo_code,==,null',
            'promo_code' => 'nullable|required_if:coupon_code,==,null'
        ];

根据您的描述,很明显您希望允许这三个输入对:

  1. coupon_code 空,promo_code 空
  2. coupon_code 值,promo_code 空
  3. coupon_code 空,promo_code 值

强制执行这 3 对值中的任何一个根本不需要任何验证规则。您可以将这两个规则都设置为可为空,并且没问题。

但从字里行间看,您似乎要求拒绝这个值对:

  1. coupon_code值,promo_code值

如果是这样,那么您可以使用 prohibited_unless:

而不是 required
  [
    'promo_code' => [
      'prohibited_unless:coupon_code,null',
    ],
    'coupon_code' => [
      'prohibited_unless:promo_code,null',
    ],
  ]

这假设您有默认的 ConvertEmptyStringsToNull 中间件。