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 та ін.)