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.