When
Дата обновления перевода 2024-07-25
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.
groups
type: array
| string
default: null
It defines the validation group or groups of this constraint. Read more about validation groups.
Дата обновления перевода 2024-07-25
payload
тип: mixed
по умолчанию: null
Эта опция может быть использована, чтобы добавить к ограничению произвольные данные, относящиеся к домену. Сконфигурированная нагрузка не используется компонентом Валидатор, но его обработка полностью зависит от вас.
Например, вы можете захотеть исользовать несколько уровней ошибок, чтобы представить неудачные ограничения в фронт-энде по-разному, в зависимости от степени сложности ошибки.
values
тип: array
по умолчанию: []
Значения пользовательских переменных, ипользуемых в выражении. Значения могут быть любым типом (числовым, булевым, строками, null, и т.д.)