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 表单验证错误消息中给出自定义字段名称