When
Дата оновлення перекладу 2025-07-27
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 19 20 21
// 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!')
],
otherwise: [
new Assert\LessThan(9999, message: 'The value should be less than 9999!')
],
)]
private ?int $value;
// ...
}
Опція expression - це вираз, який має повертати true, щоб запускати валідацію прикріплених файлів. Щоб дізнатися більше про синтаксис мови виразів, див. .
Щоб дізнатися більше про вирази та які змінні вам доступні, див. деталі опції expression нижче.
Опції
expression
тип: string|Closure
Умова, що оцінюється для визначення, чи застосовується обмеження. Вона може бути
визначена як замикання або рядок за допомогою синтаксису мови виразів.
Якщо результат є хибним значенням (false
, null
, 0
, порожній рядок або
порожній масив), обмеження, визначені в опції constraints
, не будуть
застосовуватися, але обмеження, визначені в опції otherwise
(якщо вона вказана),
будуть застосовуватися.
При використанні виразу ви можете отримати доступ до наступних змінних:
this
- Обʼєкт, який валідується (наприклад, екземпляр Discount).
value
- Значення властивості, яка валідується (доступна лише якщо обмеження застосовується до властивості).
context
- Обʼєкт ExecutionContextInterface, який надає таку інформацію як клас, який наразі валідується, імʼя властивості, яка наразі валідується, список порушень тощо.
7.2
Змінна context
у виразах була представлена в Symfony 7.2.
При використанні замикання перший аргумент є обʼєктом, який валідується.
7.3
Підтримка замикань в опції expression
була представлена в Symfony 7.3 і
вимагає PHP 8.5.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
// src/Model/Discount.php
namespace App\Model;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Context\ExecutionContextInterface;
class Discount
{
// either using an expression...
#[Assert\When(
expression: 'value == "percent"',
constraints: [new Assert\Callback('doComplexValidation')],
)]
// ... or using a closure
#[Assert\When(
expression: static function (Discount $discount) {
return $discount->getType() === 'percent';
},
constraints: [new Assert\Callback('doComplexValidation')],
)]
private ?string $type;
// ...
public function doComplexValidation(ExecutionContextInterface $context, $payload): void
{
// ...
}
}
Ви також можете передати користувацькі змінні, використовуючи опцію values.
constraints
тип: array|Constraint
Одне або декілька обмежень, які застосовуються у випадку, якщо вираз повертає true.
otherwise
тип: array|Constraint
Одне або декілька обмежень, які застосовуються у випадку, якщо вираз повертає false.
7.3
Опція otherwise
була представлена в Symfony 7.3.
Дата оновлення перекладу 2023-09-24
groups
тип: array
| string
за замовчуванням: null
Визначає групу або групи валідації обмеження. Прочитайте більше про групи валідації.
Дата оновлення перекладу 2025-07-27
payload
тип: mixed
за замовчуванням: null
Ця опція може бути використана, щоб додати довільні дані, специфічні для домену, до обмеження. Сконфігуроване корисне навантаження не використовується компонентом Validator, але його обробка повністю залежить від вас.
Наприклад, ви можете захотіти використати декілька рівнів помилок, щоб представити неуспішні обмеження по-різному у фронтенді, залежно від серйозності помилки.
values
тип: array
за замовчуванням: []
Значення користувацьких змінних, використаних у виразі. Значення можуть бути будь-яким типом (числовими, булевими, рядками, null та ін.)