Range

Дата обновления перевода 2023-09-25

Range

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

??????????? ? ???????? ??? ??????
????? Range
????????? RangeValidator

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// src/Entity/Participant.php
namespace App\Entity;

use Symfony\Component\Validator\Constraints as Assert;

class Participant
{
    #[Assert\Range(
        min: 120,
        max: 180,
        notInRangeMessage: 'You must be between {{ min }}cm and {{ max }}cm tall to enter',
    )]
    protected int $height;
}

Диапазон дат

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

1
2
3
4
5
6
7
8
9
10
11
12
13
// src/Entity/Event.php
namespace App\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 \DateTimeInterface $startDate;
}

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

1
2
3
4
5
6
7
8
9
10
11
12
13
// src/Entity/Event.php
namespace App\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 \DateTimeInterface $startDate;
}

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

1
2
3
4
5
6
7
8
9
10
11
12
13
// src/Entity/Order.php
namespace App\Entity;

use Symfony\Component\Validator\Constraints as Assert;

class Order
{
    #[Assert\Range(
        min: 'now',
        max: '+5 hours',
    )]
    protected \DateTimeInterface $deliveryDate;
}

Опции

groups

type: array | string default: null

It defines the validation group or groups of this constraint. Read more about validation groups.

invalidDateTimeMessage

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

Сообщение, отображённое, когда значения min и max являются датами и временем PHP, а заданное значение - нет.

Вы можете использовать следующие параметры в этом сообщении:

???????? ????????
{{ value }} ??????? (??????????) ????????

invalidMessage

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

Сообщение, отображённок, когда значения min и max числовые (в соответствии с PHP-функцией is_numeric), а заданное значение - нет.

Вы можете использовать следующие параметры в этом сообщении:

???????? ????????
{{ value }} ??????? (??????????) ????????
{{ label }} ??????????????? ????? ???? ?????

max

тип: number или string (формат даты)

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

maxMessage

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

Сообщение, отбражённое, если основоположное значение больше, чем опция max, а опция min не была определена (если определены обе, используйте notInRangeMessage).

Вы можете использовать следующие параметры в этом сообщении:

???????? ????????
{{ limit }} ??????? ?????
{{ value }} ??????? (??????????) ????????

maxPropertyPath

тип: string

Определяет свойство объекта, чьё значение используется как опция max.

Например, если вы хотите сравнить свойство $submittedDate некоторого объекта, относительно свойства $deadline того же объекта, используйте maxPropertyPath="deadline" в ограничении диапазона $submittedDate.

Tip

При использовании этой опции, её значение доступно в сообщении об ошибке, как заполнитель {{ max_limit_path }}. Хотя она не предназначается для использования в отображении сообщений об ошибках конечным пользователям, она полезна при использовании API для построения логики отображния на клиентской стороне.

min

тип: number или string (формат даты)

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

minMessage

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

Сообщение, отбражённое, если основоположное значение меньше, чем опция min, а опция max не была определена (если определены обе, используйте notInRangeMessage).

Вы можете использовать следующие параметры в этом сообщении:

???????? ????????
{{ limit }} ?????? ?????
{{ value }} ??????? (??????????) ????????

minPropertyPath

тип: string

Определяет свойство объекта, чьё значение используется как опция min.

Например, если вы хотите сравнить свойство $endDate некоторого объекта, относительно свойства $startDate того же объекта, используйте minPropertyPath="startDate" в ограничении диапазона $endDate.

Tip

При использовании этой опции, её значение доступно в сообщении об ошибке, как заполнитель {{ min_limit_path }}. Хотя она не предназначается для использования в отображении сообщений об ошибках конечным пользователям, она полезна при использовании API для построения логики отображния на клиентской стороне.

notInRangeMessage

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

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

Вы можете использовать следующие параметры в этом сообщении:

???????? ????????
{{ max }} ??????? ?????
{{ min }} ?????? ?????
{{ value }} ??????? (??????????) ????????

payload

тип: mixed по умолчанию: null

Эта опция может быть использована, чтобы добавить к ограничению произвольные данные, относящиеся к домену. Сконфигурированная нагрузка не используется компонентом Валидатор, но его обработка полностью зависит от вас.

Например, вы можете захотеть исользовать несколько уровней ошибок, чтобы представить неудачные ограничения в фронт-энде по-разному, в зависимости от степени сложности ошибки.