Laravel 验证请求过滤器字段,字段名称中带有点(句点)

Posted

技术标签:

【中文标题】Laravel 验证请求过滤器字段,字段名称中带有点(句点)【英文标题】:Laravel validate request filter field with dot (period) in field name 【发布时间】: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'] ]; 【参考方案1】:

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

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

编辑:

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

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

【讨论】:

这里的过滤键是entity.abc,而不是实体数组和abc作为键。

以上是关于Laravel 验证请求过滤器字段,字段名称中带有点(句点)的主要内容,如果未能解决你的问题,请参考以下文章

Laravel中带有2个外键的搜索栏

如何在 laravel 表单验证错误消息中给出自定义字段名称

Laravel Eloquent 验证请求的 items 字段 foreach

Laravel 8 - 更改默认验证字段“密码”名称

电子邮件地址字段的值已被使用。 laravel 请求验证

验证或删除 laravel 中的额外字段