Laravel `lt` 和 'gt' 验证规则仅当目标字段存在时
Laravel `lt` and 'gt' validation rules only if target fields are present
我的请求中有两个整数字段需要验证,min_height
和 max_height
,两者都是可选的,但 min_height
低于 max_height
和 max_height
会(当然)大于 min_height
.
使用验证规则如下
'min_height' => ['nullable', 'integer', 'lt:max_height'],
'max_height' => ['nullable', 'integer', 'gt:min_height'],
当其中一个存在但另一个不存在时,这当然会给我错误,因为 lt
/gt
验证规则检查 null
请求字段。
如何才能让 lt
/gt
仅在其他字段存在时才被选中?
有没有办法通过内置验证规则来实现这一点,还是我必须实现自定义验证器?
更新
可能我还不够清楚:我的两个字段都是可以为空的并且彼此独立,所以可以接收min_height
而不是[=14] =] 反之亦然:这使得 required_with
之类的规则不适用
对于我的用例。
您可以在第一个参数上使用 sometimes
。看一眼:
https://laravel.com/docs/7.x/validation#conditionally-adding-rules
您可以尝试使用 required_with 条件规则。例如你的条件将
'min_height' => 'required_with:max_height|lt:max_height',
'max_height' => 'required_with:min_height|gt:min_height',
正如@vinayak-sarawagi 所说,此用例没有 built-in 解决方案,因此必须实施自定义验证规则以在实际比较值之前检查可选的 null 参数。
我的请求中有两个整数字段需要验证,min_height
和 max_height
,两者都是可选的,但 min_height
低于 max_height
和 max_height
会(当然)大于 min_height
.
使用验证规则如下
'min_height' => ['nullable', 'integer', 'lt:max_height'],
'max_height' => ['nullable', 'integer', 'gt:min_height'],
当其中一个存在但另一个不存在时,这当然会给我错误,因为 lt
/gt
验证规则检查 null
请求字段。
如何才能让 lt
/gt
仅在其他字段存在时才被选中?
有没有办法通过内置验证规则来实现这一点,还是我必须实现自定义验证器?
更新
可能我还不够清楚:我的两个字段都是可以为空的并且彼此独立,所以可以接收min_height
而不是[=14] =] 反之亦然:这使得 required_with
之类的规则不适用
对于我的用例。
您可以在第一个参数上使用 sometimes
。看一眼:
https://laravel.com/docs/7.x/validation#conditionally-adding-rules
您可以尝试使用 required_with 条件规则。例如你的条件将
'min_height' => 'required_with:max_height|lt:max_height',
'max_height' => 'required_with:min_height|gt:min_height',
正如@vinayak-sarawagi 所说,此用例没有 built-in 解决方案,因此必须实施自定义验证规则以在实际比较值之前检查可选的 null 参数。