【问题标题】:Laravel if one field is filled then others are not requiredLaravel 如果填写了一个字段,则不需要其他字段
【发布时间】:2021-05-29 11:22:03
【问题描述】:

我有三个可以为空的字段(CouponMembershipOffer)要从请求中填写。我想验证/限制用户,以便他们只能填写这些字段之一。 由于这些字段不是必需的,因此我无法使用 required:* 验证器来处理此问题。 我知道这可以在前端处理,但我也想在后端处理。

感谢对此的任何帮助/见解。

【问题讨论】:

  • 是否只有一个可以从您的请求中填写的字段每次都相同?例如,您只想填写coupon?还是每次都是不同的领域?如果不同,哪些优先于其他?
  • 它可以是三个之一,也可以不是。取决于用户输入的内容,所以这里没有设置优先级。
  • 好的。所以如果他们给所有三个,你想设置哪一个?
  • 这听起来像表单控件应该是一个选择字段或单选按钮,其中字段的值是用户选择的三个选项之一?

标签: laravel validation laravel-8


【解决方案1】:

您可以在 laravel 验证中使用 required_without_all function

$request->validate([
    'coupon'     => ['nullable', 'required_without_all:membership,offer'],
    'membership' => ['nullable', 'required_without_all:coupon,offer'],
    'offer'      => ['nullable', 'required_without_all:membership,coupon'],
]);

【讨论】:

  • 在提供数据作为报价时,我收到以下错误消息。 { "message": "The given data was invalid.", "errors": { "coupon_id": [ "The coupon id field is required when membership enroll id / offer id is not present." ], "membership_enroll_id": [ "The membership enroll id field is required when coupon id / offer id is not present." ] } }
【解决方案2】:

我会采用将选项作为同一字段的三个可能值的方法。您可以使用表单上的选择或单选按钮组来填写单个字段。这样用户只能输入三个可能的值之一。

例如,如果我们调用字段type,您的验证将检查为type 提供的值是否是三个选项之一。

$request->validate([
    'type' => [
          'nullable',
          Rule::in(['coupon', 'membership', 'offer']),
    ],
]);

编辑: 添加可为空的验证以允许该字段完全没有值

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    • 2018-01-06
    • 1970-01-01
    相关资源
    最近更新 更多