When

Дата оновлення перекладу 2024-05-29

When

Це обмеження дозволяє вам застосовувати валідацію обмежень лише якщо наданий вираз повертає true. Див. базове використанням, щоб побачити приклад.

?????????????? ?? ????? ??? ???????????/??????
?????
???? When
????????? WhenValidator

Базове використання

Уявіть, що у вас є клас Discount з властивостями type та value:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// src/Model/Discount.php
namespace App\Model;

class Discount
{
    private ?string $type;

    private ?int $value;

    // ...

    public function getType(): ?string
    {
        return $this->type;
    }

    public function getValue(): ?int
    {
        return $this->value;
    }
}

Щоб валідувати обʼєкт, у вас є деякі вимоги:

A) Якщо type - percent, тоді value має бути меншим ніж або дорівнювати 100; B) Якщо type - absolute, тоді value може бути чим завгодно; C) Не зважаючи на значення type, value має бути більшим за 0.

Одним способом досягти цього - це з обмеженням When:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// src/Model/Discount.php
namespace App\Model;

use Symfony\Component\Validator\Constraints as Assert;

class Discount
{
    #[Assert\GreaterThan(0)]
    #[Assert\When(
        expression: 'this.getType() == "percent"',
        constraints: [
            new Assert\LessThanOrEqual(100, message: 'The value should be between 1 and 100!')
        ],
    )]
    private ?int $value;

    // ...
}

Опція expression - це вираз, який має повертати true, щоб запускати валідацію прикріплених файлів. Щоб дізнатися більше про синтаксис мови виразів, див. .

Щоб дізнатися більше про вирази та які змінні вам доступні, див. деталі опції expression нижче.

Опції

expression

тип: string

Умова, написана з синтаксисом мови виразів, яка буде оцінена. Якщо вираз оцінюється як хибне значення (тобто, використання ==, а не ===), валідація обмежень не буде запущена.

Щоб дізнатися більше про синтаксис мови виразів, див. .

В залежності від того, як ви використовуєте обмеження, у вас є доступ до 1 або 2 змінних у вашому виразі:

this
Обʼєкт, який валідується (наприклад, екземпляр Discount).
value
Значення властивості, яка валідується (доступна лише якщо обмеження застосовується до властивості).

Змінна value може бути використана, коли ви хочете виконати складнішу валідацію, засновану на її значенні:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// src/Model/Discount.php
namespace App\Model;

use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Context\ExecutionContextInterface;

class Discount
{
    #[Assert\When(
        expression: 'value == "percent"',
        constraints: [new Assert\Callback('doComplexValidation')],
    )]
    private ?string $type;
    // ...

    public function doComplexValidation(ExecutionContextInterface $context, $payload): void
    {
        // ...
    }
}

Ви також можете передати користувацькі змінні, використовуючи опцію values.

constraints

тип: array|Constraint

Одне або декілька обмежень, які застосовуються у випадку, якщо вираз повертає true.

Дата оновлення перекладу 2023-09-24

groups

тип: array | string за замовчуванням: null

Визначає групу або групи валідації обмеження. Прочитайте більше про групи валідації.

Дата оновлення перекладу 2024-05-29

payload

тип: mixed за замовчуванням: null

Ця опція може бути використана, щоб додати довільні дані, специфічні для домену, до обмеження. Сконфігуроване корисне навантаження не використовується компонентом Validator, але його обробка повністю залежить від вас.

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

values

тип: array за замовчуванням: []

Значення користувацьких змінних, використаних у виразі. Значення можуть бути будь-яким типом (числовими, булевими, рядками, null та ін.)