Laravel验证GTE规则

时间:2019-04-01 12:13:47

标签: validation laravel-validation laravel-5.8

我正在使用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规则正在比较两个字段的类型,即使其中一个是nullrequired规则。我该如何解决?

1 个答案:

答案 0 :(得分:0)

我认为规则的评估顺序存在问题。

如果首先评估adults,它将失败,并显示adults is required错误。但是,如果首先评估people,它将尝试将其与成人进行比较,从而引发错误。您可以通过有条件地添加最后一条规则来解决此问题:

[
     'adults' => ['required', 'numeric'],
     'people' => ['required', 'numeric', $request->has('adults') ? 'gte:adults' : ''],
]