我正在开发一个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
规则。我怎么能绕过这个?
我认为这是规则评估顺序的问题。
如果首先评估adults
,它会因adults is required
错误而失败。但是,如果首先评估people
,它会尝试将其与成人进行比较,从而引发错误。您可以通过有条件地添加最后一条规则来解决此问题:
[
'adults' => ['required', 'numeric'],
'people' => ['required', 'numeric', $request->has('adults') ? 'gte:adults' : ''],
]