Range

Валидирует, что заданное число находится между некоторым минимальным и максимальным числом.

Применяется к свойству или методу
Опции
Класс Range
Валидатор RangeValidator

Базовое применение

Чтобы убедиться, что "высота" поля класса находится между "120" и "180", вы можете добавить следующее:

  • Annotations
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    // src/AppBundle/Entity/Participant.php
    namespace AppBundle\Entity;
    
    use Symfony\Component\Validator\Constraints as Assert;
    
    class Participant
    {
        /**
         * @Assert\Range(
         *      min = 120,
         *      max = 180,
         *      minMessage = "Ваш рост должен быть минимум {{ limit }} см для входа",
         *      maxMessage = "Ваш рост не может быть больше {{ limit }} см для входа"
         * )
         */
         protected $height;
    }
    
  • YAML
    1
    2
    3
    4
    5
    6
    7
    8
    9
    # src/AppBundle/Resources/config/validation.yml
    AppBundle\Entity\Participant:
        properties:
            height:
                - Range:
                    min: 120
                    max: 180
                    minMessage: Ваш рост должен быть минимум {{ limit }} см для входа
                    maxMessage: Ваш рост не может быть больше {{ limit }} см для входа
    
  • XML
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    <!-- src/AppBundle/Resources/config/validation.xml -->
    <?xml version="1.0" encoding="UTF-8" ?>
    <constraint-mapping xmlns="http://symfony.com/schema/dic/constraint-mapping"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://symfony.com/schema/dic/constraint-mapping http://symfony.com/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd">
    
        <class name="AppBundle\Entity\Participant">
            <property name="height">
                <constraint name="Range">
                    <option name="min">120</option>
                    <option name="max">180</option>
                    <option name="minMessage">Ваш рост должен быть минимум {{ limit }} см для входа</option>
                    <option name="maxMessage">Ваш рост не может быть больше {{ limit }} см для входа</option>
                </constraint>
            </property>
        </class>
    </constraint-mapping>
    
  • PHP
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    // src/AppBundle/Entity/Participant.php
    namespace AppBundle\Entity;
    
    use Symfony\Component\Validator\Mapping\ClassMetadata;
    use Symfony\Component\Validator\Constraints as Assert;
    
    class Participant
    {
        public static function loadValidatorMetadata(ClassMetadata $metadata)
        {
            $metadata->addPropertyConstraint('height', new Assert\Range(array(
                'min'        => 120,
                'max'        => 180,
                'minMessage' => 'Ваш рост должен быть минимум {{ limit }} см для входа',
                'maxMessage' => 'Ваш рост не может быть больше {{ limit }} см для входа',
            )));
        }
    }
    

Диапазон дат

Это ограничение может быть использовано для сравнения объектов DateTime с диапазоном дат. Минимальная и максимальная даты диапазона должны быть заданы, как любая строка даты приемлемая конструктором DateTime. Например, вы можете проверить, чтобы дата находилась в текущем году, таким образом:

  • Annotations
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    // src/AppBundle/Entity/Event.php
    namespace AppBundle\Entity;
    
    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;
    }
    
  • YAML
    1
    2
    3
    4
    5
    6
    7
    # src/AppBundle/Resources/config/validation.yml
    AppBundle\Entity\Event:
        properties:
            startDate:
                - Range:
                    min: first day of January
                    max: first day of January next year
    
  • XML
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    <!-- src/AppBundle/Resources/config/validation.xml -->
    <?xml version="1.0" encoding="UTF-8" ?>
    <constraint-mapping xmlns="http://symfony.com/schema/dic/constraint-mapping"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://symfony.com/schema/dic/constraint-mapping http://symfony.com/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd">
    
        <class name="AppBundle\Entity\Event">
            <property name="startDate">
                <constraint name="Range">
                    <option name="min">first day of January</option>
                    <option name="max">first day of January next year</option>
                </constraint>
            </property>
        </class>
    </constraint-mapping>
    
  • PHP
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    // src/AppBundle/Entity/Event.php
    namespace AppBundle\Entity;
    
    use Symfony\Component\Validator\Mapping\ClassMetadata;
    use Symfony\Component\Validator\Constraints as Assert;
    
    class Event
    {
        public static function loadValidatorMetadata(ClassMetadata $metadata)
        {
            $metadata->addPropertyConstraint('startDate', new Assert\Range(array(
                'min' => 'first day of January',
                'max' => 'first day of January next year',
            )));
        }
    }
    

Помните, что PHP будет использовать временную зону, сконфигурированную сервером, чтобы интерпретировать эти данные. Если вы хотите изменить временную зону, добавьте в начале строки даты:

  • Annotations
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    // src/AppBundle/Entity/Event.php
    namespace AppBundle\Entity;
    
    use Symfony\Component\Validator\Constraints as Assert;
    
    class Event
    {
        /**
         * @Assert\Range(
         *      min = "first day of January UTC",
         *      max = "first day of January next year UTC"
         * )
         */
        protected $startDate;
    }
    
  • YAML
    1
    2
    3
    4
    5
    6
    7
    # src/AppBundle/Resources/config/validation.yml
    AppBundle\Entity\Event:
        properties:
            startDate:
                - Range:
                    min: first day of January UTC
                    max: first day of January next year UTC
    
  • XML
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    <!-- src/AppBundle/Resources/config/validation.xml -->
    <?xml version="1.0" encoding="UTF-8" ?>
    <constraint-mapping xmlns="http://symfony.com/schema/dic/constraint-mapping"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://symfony.com/schema/dic/constraint-mapping http://symfony.com/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd">
    
        <class name="AppBundle\Entity\Event">
            <property name="startDate">
                <constraint name="Range">
                    <option name="min">first day of January UTC</option>
                    <option name="max">first day of January next year UTC</option>
                </constraint>
            </property>
        </class>
    </constraint-mapping>
    
  • PHP
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    // src/AppBundle/Entity/Person.php
    namespace AppBundle\Entity;
    
    use Symfony\Component\Validator\Mapping\ClassMetadata;
    use Symfony\Component\Validator\Constraints as Assert;
    
    class Event
    {
        public static function loadValidatorMetadata(ClassMetadata $metadata)
        {
            $metadata->addPropertyConstraint('startDate', new Assert\Range(array(
                'min' => 'first day of January UTC',
                'max' => 'first day of January next year UTC',
            )));
        }
    }
    

Класс DateTime также принимает относительные даты и время. Например, вы можете проверить, чтобы дата доставки начиналась в течение следующих пяти часов, таким образом:

  • Annotations
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    // src/AppBundle/Entity/Order.php
    namespace AppBundle\Entity;
    
    use Symfony\Component\Validator\Constraints as Assert;
    
    class Order
    {
        /**
         * @Assert\Range(
         *      min = "now",
         *      max = "+5 hours"
         * )
         */
        protected $deliveryDate;
    }
    
  • YAML
    1
    2
    3
    4
    5
    6
    7
    # src/AppBundle/Resources/config/validation.yml
    AppBundle\Entity\Order:
        properties:
            deliveryDate:
                - Range:
                    min: now
                    max: +5 hours
    
  • XML
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    <!-- src/AppBundle/Resources/config/validation.xml -->
    <?xml version="1.0" encoding="UTF-8" ?>
    <constraint-mapping xmlns="http://symfony.com/schema/dic/constraint-mapping"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://symfony.com/schema/dic/constraint-mapping http://symfony.com/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd">
    
        <class name="AppBundle\Entity\Order">
            <property name="deliveryDate">
                <constraint name="Range">
                    <option name="min">now</option>
                    <option name="max">+5 hours</option>
                </constraint>
            </property>
        </class>
    </constraint-mapping>
    
  • PHP
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    // src/AppBundle/Entity/Order.php
    namespace AppBundle\Entity;
    
    use Symfony\Component\Validator\Mapping\ClassMetadata;
    use Symfony\Component\Validator\Constraints as Assert;
    
    class Order
    {
        public static function loadValidatorMetadata(ClassMetadata $metadata)
        {
            $metadata->addPropertyConstraint('deliveryDate', new Assert\Range(array(
                'min' => 'now',
                'max' => '+5 hours',
            )));
        }
    }
    

Опции

min

тип: integer

Эта обязательная опция является "min" значением. Валидация будет неуспешной, если заданное значение будет меньше минимального значения.

max

тип: integer

Эта обязательная опция является "max" значением. Валидация будет неуспешной, если заданное значение будет больше минимального значения.

minMessage

тип: string по умолчанию: Это значение должно быть {{ limit }} или больше.

Сообщение, которое будет показано, если основположное значение меньше, чем опция min.

maxMessage

тип: string по умолчанию: Это значение должно быть {{ limit }} или меньше.

Сообщение, которое будет показано, если основположное значение больше, чем опция max .

invalidMessage

тип: string по умолчанию: Это значение должно быть валидным числом.

Сообщение, которое будет показано, если основположное значение не является числом (в PHP-функции is_numeric).

payload

type: mixed default: null

This option can be used to attach arbitrary domain-specific data to a constraint. The configured payload is not used by the Validator component, but its processing is completely up to you.

For example, you may want to use several error levels to present failed constraints differently in the front-end depending on the severity of the error.

Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.