【问题标题】:Laravel validate request filter field with dot (period) in field nameLaravel 验证请求过滤器字段,字段名称中带有点(句点)
【发布时间】:2021-04-11 12:58:49
【问题描述】:

这里是验证 laravel 中的表单请求,请求包含过滤器,过滤器中的字段名称存在句点(点)。

示例请求网址

...?filter[entity.abc][]='value'

这里的 entity.abc 实际上是一个字符串,但是 laravel 认为它是对象数组,当为 'filter.entity.abc' 给出规则时

filter:[
    [entity]: [ {abc:'value'}]
      ]

其实是

filter:[
   [entity.abc]:['value']
]

所以我们需要为第二个点制作正则表达式,相当于:

public function rules()
{
    return [
        'filter.entity\.abc' => ['bail', 'sometimes', 'array'],
        'filter.entity\.abc' => ['uuid']
    ];
}

即使存在无效的 uuid,也始终返回 true

【问题讨论】:

  • 你能用_- 代替. 吗? Laravel 将“点符号”用于一堆事情,例如用于验证的嵌套表单字段等。虽然 . 可能是有效的,但它与您正在使用的框架背道而驰。此外,您不能两次拥有具有相同键的数组,它需要是 filter.entity\.abc' => ['bail', 'sometimes', 'array', 'uuid']
  • 感谢@TimLewis 强调这一点,它有效。 return [ 'filter.entity\.abc' => ['bail', 'sometimes', 'array'], 'filter.entity\.abc.*' => ['uuid'] ];

标签: laravel validation laravel-7 request-validation


【解决方案1】:

为什么不这样修改你的请求呢?

...?filter[entity][abc][]='value'

编辑:

您可以在 laravel 中使用自定义验证,您可以在其中解构参数并手动检查值

Laravel 自定义验证 https://laravel.com/docs/8.x/validation

【讨论】:

  • 这里的过滤键是entity.abc,而不是实体数组和abc作为键。
猜你喜欢
  • 2021-03-11
  • 1970-01-01
  • 2016-01-25
  • 2023-03-29
  • 2017-11-17
  • 1970-01-01
  • 2018-02-27
  • 2022-09-28
  • 2018-05-27
相关资源
最近更新 更多