我正在使用Web应用程序,因此需要验证表单。表单有两个数字字段,我需要确保其中一个大于或等于另一个。
所以我用了这些规则。
[
'adults' => ['required', 'numeric'],
'people' => ['required', 'numeric', 'gte:adults'],
]
除一种情况外,其他所有功能均正常工作。说adults
丢失或null
,但people
没有。然后,我会期望adults is required
消息。但是我得到了
InvalidArgumentException: The values under comparison must be of the same type.
因此,似乎gte
规则正在比较两个字段的类型,即使其中一个是null
与required
规则。我该如何解决?
答案 0 :(得分:0)
我认为规则的评估顺序存在问题。
如果首先评估adults
,它将失败,并显示adults is required
错误。但是,如果首先评估people
,它将尝试将其与成人进行比较,从而引发错误。您可以通过有条件地添加最后一条规则来解决此问题:
[
'adults' => ['required', 'numeric'],
'people' => ['required', 'numeric', $request->has('adults') ? 'gte:adults' : ''],
]