#php #symfony #date #symfony-validator
#php #symfony #Дата #symfony-валидатор
Вопрос:
Я использую Symfony v5.2 Я создал это ограничение :
$constraint = new AssertCollection([
'firstname' => [
new AssertNotNull(),
new AssertNotBlank()
],
'lastname' => [
new AssertNotNull(),
new AssertNotBlank()
],
'birthdate' => [
new AssertNotNull(),
new AssertNotBlank(),
new AssertDate(),
new AssertLessThan('today')
]
]);
Затем я отправляю этот JSON с postman :
{
"firstname": "john",
"lastname": "doe",
"birthdate": "2030-01-01"
}
Но утверждение не запускается. Кажется, что меньшее значение относится только к дате и времени, но не уверен.
Что я сделал не так? Нужно ли мне делать собственную проверку даты?
Ответ №1:
В вашем случае 2 строки сравниваются валидатором LessThan
Вы должны преобразовать значение запроса birthdate
в объект DateTime
перед проверкой.
Комментарии:
1. Также
NotNull
утверждение не требуется, если естьNotBlank
утверждение2.
DateTime
Согласно документации , отправка объекта в утверждение не должна быть необходимой. Все, что нужно обеспечить, это то, чтоbirthdate
преобразуется вDateTime
объект перед сравнением.3. @El_Vanja да, вы правы, я изменил ответ
4. Хорошо, спасибо за ваши комментарии! У меня новая проблема: когда я пытаюсь указать будущую дату рождения (например, 2022-01-01), у меня меньше, чем у триггера assert (хорошо), НО у меня также есть причина «Это значение должно иметь тип string» для Assert DateTime(), и теперь я отправляю объект DateTime. Это потому, что я отправляю объект DateTime, который я знаю. Как вы думаете, я могу проверить, что дата хорошая, А дата меньше, чем сегодня подряд?
5. Хорошо, я нашел свое решение. Я создал новый объект DateTime из данных «birthday»: $FormData[‘birthDayDateTime’] = new DateTime($FormData[‘birthdate’]); ЗАТЕМ я проверяю следующим образом: ‘birthdate’ => [ new Assert NotBlank(), new Assert Date() ], ‘birthDayDateTime’ => [ новое утверждение меньше, чем (‘сегодня’) ] Спасибо 🙂