Сравнение дат является одной из наиболее востребованных функций компонента Symfony Validator. Вот почему Symfony 2.6 будет включать в себя поддержку дат для валидации посредствам сравнения и принадлежности к диапазону.
Во-первых, ограничения GreaterThan, GreaterThanOrEqual, LessThan и LessThanOrEqual позволяют сравнивать значения с указанной даты. Давайте представим, что ваше приложение создает заказы, которые должны быть подтверждены в течении 15 минут или быстрее. Используя ограничение LessThanOrEqual, вы можете использовать следующий код:
use Symfony\Component\Validator\Constraints as Assert; class Booking { /** * @Assert\LessThanOrEqual("+15 minutes") */ protected $confirmedAt; }
Другим примером может быть, ограничения доступа на ваш сайт несовершеннолетних, это можно сделать следующим образом:
use Symfony\Component\Validator\Constraints as Assert; class Person { /** * @Assert\LessThan("-18 years") */ protected $dateOfBirth; }
Эти ограничения поддерживают все семантических форматы, которые поддерживаются конструктором DateTime, так что вы можете задать довольно продвинутые проверки. Рассмотрим приложение, которое позволяет пользователям отправлять события, но только те, которые начинаются в текущем году. Используя Range Assert можно сделать эту проверку следующим образом:
use Symfony\Component\Validator\Constraints as Assert; class Event { /** * @Assert\Range( * min = "first day of January", * max = "first day of January next year" * ) */ protected $startDate; }
Учтите, что PHP будет использовать настроенный на сервере часовой пояс, чтобы интерпретировать эти даты. Если вы хотите указать часовой пояс явно, добавьте его в строке даты:
use Symfony\Component\Validator\Constraints as Assert; /** * @Assert\LessThanOrEqual("+15 minutes Asia/Tokyo") */ protected $confirmedAt; /** * @Assert\LessThan("-18 years UTC") */ protected $dateOfBirth; /** * @Assert\Range( * min = "first day of January America/Buenos_Aires", * max = "first day of January next year America/Buenos_Aires" * ) */ protected $startDate;
Все предыдущие примеры использовать аннотации для установки проверок, но вы также можете использовать форматы YAML и XML. Проверьте документацию Validator, чтобы получить больше примеров об этих валидаторах (как момент написания этого блога, документации не были объединены; проверить его на эту просьбу выдвижной).
Наконец, если вы хотите использовать эти валидаторы, но у вас нет возможности обновиться до Symfony 2.6, посмотрите в сторону PUGXExtraValidatorBundle, который содержит три аналогичных валидатора DateRange, MinDate и MaxDate.
Источник: http://symfony.com/blog/new-in-symfony-2-6-date-support-for-validator-constraints