Новое в Symfony 2.6: Поддержка дат в средствах валидации

Сравнение дат является одной из наиболее востребованных функций компонента 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

Добавить комментарий

Ваш адрес email не будет опубликован.

15 − один =