#validation #laravel-validation #laravel-5.8
#проверка #laravel-проверка #laravel-5.8
Вопрос:
Я работаю над веб-приложением, и мне нужно было проверить форму. Форма содержит два числовых поля, и мне нужно убедиться, что одно из них больше или равно другому.
Итак, я использовал эти правила.
[
'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
правилом. Как я могу обойти это?
Комментарии:
1. Каковы ошибки проверки и как выглядит тело запроса?
2. Я обновил свой вопрос, чтобы включить ошибку, которую я получаю в конкретном случае.
Ответ №1:
Я думаю, что это проблема с порядком вычисления правил.
Если adults
вычисляется первым, это приведет к сбою с adults is required
ошибкой. Однако, в случае, если people
сначала оценивается, он пытается сравнить его с adults, выдавая ошибку. Вы могли бы решить эту проблему, условно добавив последнее правило:
[
'adults' => ['required', 'numeric'],
'people' => ['required', 'numeric', $request->has('adults') ? 'gte:adults' : ''],
]