【发布时间】: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