Choice

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

Choice

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

??????????? ? ???????? ??? ??????
????? Choice
????????? ChoiceValidator

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

Базовая идея этого ограничения заключается в том, что вы поставляете ему массив валидных значений (можно сделать насколькими способами), а оно валидирует, что значение заданного свойства существует в этом массиве.

Если список ваших валидных вариантов прост, то вы можетеп передать их напрямую через опцию choices:

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

use Symfony\Component\Validator\Constraints as Assert;

class Author
{
    public const GENRES = ['fiction', 'non-fiction'];

    #[Assert\Choice(['New York', 'Berlin', 'Tokyo'])]
    protected string $city;

    #[Assert\Choice(choices: Author::GENRES, message: 'Choose a valid genre.')]
    protected string $genre;
}

Поставка вариантов с функцией обратного вызова

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

// src/Entity/Author.php namespace AppEntity;

class Author { public static function getGenres(): array { return ['fiction', 'non-fiction']; } }

Вы можете передать имя этого метода опции callback ограничения Choice.

1
2
3
4
5
6
7
8
9
10
// src/Entity/Author.php
namespace App\Entity;

use Symfony\Component\Validator\Constraints as Assert;

class Author
{
    #[Assert\Choice(callback: 'getGenres')]
    protected string $genre;
}

Если обратный вызов хранится в другом классе и является статичным, например, Util, то вы можете передать имя класса и метод в виде массива.

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

use App\Entity\Genre
use Symfony\Component\Validator\Constraints as Assert;

class Author
{
    #[Assert\Choice(callback: [Genre::class, 'getGenres'])]
    protected string $genre;
}

Доступные опции

callback

тип: string|array|Closure

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

choices

тип: array [опция по умолчанию ]

Обязательная опция (кроме случаев, когда указана callback) - это массив опций, которые должны быть рассмотрены в валидном наборе. Значение ввода будет сопоставлено с тим массивом.

groups

type: array | string default: null

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

max

тип: integer

Если опция multiple - "true", то вы можете использовать опцию max, чтобы формировать макисмальное количество значений для выбора. Например, если max - 3, а массив ввода содержит 4 валидных элемента, то валидация будет неудачной.

maxMessage

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

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

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

???????? ????????
{{ choices }} ?????? ????????? ?????, ??????????? ???????
{{ value }} ??????? (??????????) ????????

match

тип: boolean по умолчанию: true

Когда эта опция false, ограничение проверяет, чтобы заданное значение не было одним из значений, определённых в опции choices. На практике, это заставляет органичение Choice вести себя как ограничение NotChoice.

message

тип: string по умолчанию: Значение, которое вы выбрали, не является валидным вариантом.

Это сообщение, которое вы получите, если опция multiple установлена, как false и основоположное значение не находится в массиве валидных вариантов.

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

???????? ????????
{{ choices }} ?????? ????????? ?????, ??????????? ???????
{{ value }} ??????? (??????????) ????????

min

тип: integer

Если опция multiple - "true", то вы можете использовать опцию min, чтобы формировать минимальное количество значений для выбора. Например, если min - 3, а массив ввода содержит только два валидных элемента, то валидация будет неудачной.

minMessage

тип: string по умолчанию: Вы должны выбрать хотя бы {{ limit }} вариантов.

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

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

???????? ????????
{{ choices }} ?????? ????????? ?????, ??????????? ???????
{{ value }} ??????? (??????????) ????????

multiple

тип: boolean по умолчанию: false

Если эта опция установлена, как "true", то значение ввода должно быть массивом вместо одиночного скалярного значения. Ограничение проверит, чтобы каждое значение массива ввода можно было найти в массиве валидных вариантов. Даже если одно из значений ввода нельзя найти, то валидация будет неудачной.

multipleMessage

тип: string по умолчанию: Одно или более значений инвалидны.

Это сообщение, которое вы получите, если опция multiple установлена, как true и одно из значение проверяемого основоположного массива не находится в массиве валидных вариантов.

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

???????? ????????
{{ choices }} ?????? ????????? ?????, ??????????? ???????
{{ value }} ??????? (??????????) ????????

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

payload

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

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

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

separator

тип: string по умолчанию: -------------------

Эта опция позволяет вам настроить визуальный разделитель, отображаемый после предпочтительных вариантов. Вы можете использовать HTML-элементы типа <hr> для отображения более современного разделителя, но для этого необходимо установить опцию separator_html в значение true.

7.1

Опция separator была представлена в Symfony 7.1.

separator_html

тип: boolean по умолчанию: false

Если эта опция - true, опция separator будет отображаться в виде HTML вместо текста. Это полезно при использовании HTML-элементов (например, <hr>) в качестве более современного визуального разделителя.

7.1

Опция separator_html была представлена в Symfony 7.1.