【问题标题】:Laravel validation: required field in not required arrayLaravel验证:不需要的数组中的必填字段
【发布时间】:2019-02-03 08:07:30
【问题描述】:

请求可以包含字段coord ({x: 1, y: 2}) 或不包含它。例如:

正确(没有coord):

[
    'another_param' => 'value',
],

正确:

[
    'another_param' => 'value',
    'coord' => [
        'x' => 1,
        'y' => 2,
    ],
],

无效(coord 格式错误):

[
    'another_param' => 'value',
    'coord' => [
        'x' => 1,
    ],
],

是否可以按标准规则编写(没有自定义和闭包)。

我的尝试:

'rules' => [
    'coord' => 'array',
    'coord.x' => 'required',
    'coord.y' => 'required',
],

但如果请求不包含coord,则错误:coord.x 字段是必需的。

【问题讨论】:

    标签: laravel laravel-validation


    【解决方案1】:

    您可以使用sometimes 验证规则,因此它仅在字段存在时适用。

    'rules' => [
        'coord' => 'sometimes|array',
        'coord.x' => 'required',
        'coord.y' => 'required',
    ],
    

    【讨论】:

    • 如果值存在但为空laravel.com/docs/5.6/validation#a-note-on-optional-fields,可能还需要nullable 选项
    • 不,它不适用于没有“coord”的输入:coord.x 是必需的,而 coord.y 是必需的。
    • 尝试将sometimes|required也添加到这两个
    • Phiter,那么空的“坐标”将是有效的。
    【解决方案2】:

    您可以在使用 required_with 提供数组时要求字段:

    'rules' => [
        'coord' => 'sometimes|array|min:1',
        'coord.x' => 'required_with:coord',
        'coord.y' => 'required_with:coord',
    ],
    

    sometimes 规则允许丢弃此字段,min:1 确保提供此坐标字段时,它不是空数组。

    【讨论】:

    • 1.空坐标将有效。 2. 如果我有 10 个字段,我必须为每个字段都写这些吗?
    • 您可以使用 nullable 或有时在坐标本身上。只是 required_with:coord 可能适用于所有领域,还没有尝试过
    • 也许吧,但它比编写自定义闭包更难看
    • 为什么更丑?它只是比要求的多几个字符。
    • 丑不是用字数来衡量的:)
    【解决方案3】:

    您可以尝试将数组字段验证为coord.*.x 我的意思是:

    'rules' => [
        'coord' => 'array',
        'coord.*.x' => 'required',
        'coord.*.y' => 'required',
    ],
    

    那么如果坐标数组有元素,就需要x和y

    【讨论】:

      【解决方案4】:

      不确定它是否仍然是实际的,但这是我解决它的方法:

      'rules' => [
          'coord' => ['nullable', 'array'],
          'coord.x' => 'required_unless:coord,null',
          'coord.y' => 'required_unless:coord,null',
      ],
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-11-26
        • 2017-06-04
        • 1970-01-01
        • 2018-03-29
        • 2021-06-14
        • 2015-01-15
        • 1970-01-01
        相关资源
        最近更新 更多