Choice
Дата оновлення перекладу 2024-05-29
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) - це масив опцій, які повинні бути розглянуті у валідному наборі. Значення введення буде співставлене з цим масивом.
Дата оновлення перекладу 2023-09-24
groups
тип: array
| string
за замовчуванням: null
Визначає групу або групи валідації обмеження. Прочитайте більше про групи валідації.
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
,
і одне зі значень масиву, який перевіряється і лежить в основі, не знаходиться у
масиві валідних варіантів.
???????? | ???? |
---|---|
{{ value }} |
??????? (?????????) ???????? |
{{ label }} |
??????????? ????? ???? ????? |
Дата оновлення перекладу 2024-05-29
payload
тип: mixed
за замовчуванням: null
Ця опція може бути використана, щоб додати довільні дані, специфічні для домену, до обмеження. Сконфігуроване корисне навантаження не використовується компонентом Validator, але його обробка повністю залежить від вас.
Наприклад, ви можете захотіти використати декілька рівнів помилок, щоб представити неуспішні обмеження по-різному у фронтенді, залежно від серйозності помилки.
separator
тип: string
за замовчуванням: -------------------
Ця опція дозволяє вам налаштувати візуальний роздільник, що відображається після обраних
варіантів. Ви можете використовувати елементи HTML на кшталт <hr>
для відображення більш
сучасного роздільника, але вам також потрібно встановити опцію separator_html у значення
true
.
7.1
Опція separator
була представлена в Symfony 7.1.
separator_html
тип: boolean
за замовчуванням: false
Якщо ця опція має значення true, опція сепаратор буде показана у вигляді HTML замість тексту.
Це корисно при використанні елементів HTML (наприклад, <hr>
) як більш сучасного
візуального роздільника.
7.1
Опція separator_html
була представлена в Symfony 7.1.