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.