【问题标题】:Laravel validation rule 'required_with' does not work with ArrayLaravel 验证规则“re​​quired_with”不适用于 Array
【发布时间】:2020-03-25 00:29:09
【问题描述】:

我正在尝试验证 3 个数组,如果第一个存在,它们必须具有相同的长度,因为它们是相关的。 我收到的输入是这样的:

'materiales' => 
  array (
    0 => '181',
    1 => '191',
    2 => '189',
  ),
 'cantidades' => 
  array (
    0 => '27.65',
    1 => '1.27',
    2 => '26.24',
  ),
 'unidades' => 
  array (
    0 => '0',
    1 => '1',
  ),

对于这种输入,我想要一个验证错误,因为 'unidades'[3] 不存在,但验证器认为数据有效。我的规则是:

'materiales' => 'required|array',
'materiales.*' => 'nullable|exists:articulos,id',
'cantidades' => 'required|array',
'cantidades.*' => 'required_with:materiales.*|numeric|min:0.0001',
'unidades' => 'required|array',
'unidades.*' => 'required_with:materiales.*|required|numeric',

【问题讨论】:

    标签: arrays laravel validation


    【解决方案1】:

    改用size 规则怎么样?我还没有尝试过,但它应该可以工作:

    'materiales'   => 'required|array',
    'materiales.*' => 'nullable|exists:articulos,id',
    'cantidades'   => 'required|array',
    'cantidades.*' => 'required_with:materiales.*|numeric|min:0.0001',
    'unidades'     => 'required|array',
    'unidades.*'   => 'required_with:materiales.*|required|numeric|size:' . count(request('materiales')),
    

    【讨论】:

    • 是的,它可以工作,但是错误消息让用户有点困惑:unidades.3 必须是 3。我很确定我可以使用您的建议或任何其他自定义规则来解决这个问题,但我很感兴趣为什么 required_with 规则不起作用。
    • required_with 期望该字段完全存在,它不适用于动态元素。如果您使用表单请求,您可以像在 messages() 方法中一样覆盖消息,或者作为验证器中的第三个参数,使用 'unidades.*.size' => 'Your message here'
    【解决方案2】:

    由于您需要所有数组的长度相同,我建议您验证每个数组的长度

    'materiales' => 'required|array',
    'materiales.*' => 'nullable|exists:articulos,id|size:3',
    'cantidades' => 'required|array',
    'cantidades.*' => 'required_with:materiales.*|numeric|min:0.0001|size:3',
    'unidades' => 'required|array',
    'unidades.*' => 'required_with:materiales.*|required|numeric|size:3',
    

    我假设您需要数组长度为 3

    【讨论】:

    • 数组可以是任意长度
    猜你喜欢
    • 2015-10-20
    • 2015-11-29
    • 2022-01-09
    • 1970-01-01
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    相关资源
    最近更新 更多