Ограничение Symfony меньше даты

#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’ => [ новое утверждение меньше, чем (‘сегодня’) ] Спасибо 🙂