Sequentially
Дата обновления перевода 2023-09-253
Sequentially
Это ограничение позволяет вам применять набор правил, которые должны быть валидированы пошагово, позволяя прерывание валидации, как только будет обнаружено первое нарушение.
В качестве альтернативы в ситуациях, которые не может решить Sequentially
, вы
можете рассмотреть использование GroupSequence,
которое позволяет больше контроля.
??????????? ? | ???????? ??? ?????? |
????? | Sequentially |
????????? | SequentiallyValidator |
Базовое использование
Представьте, что у вас есть объект Place
со свойством $address
, которое
должно соответствовать следующим требованиям:
- не быть пустой строкой
- состоять как минимум из 10 знаков
- иметь конкретный формат
- быть геолокализируемым с помощью внешнего сервиса
В таких ситуациях вы можете столкнуться с тремя проблемами:
- ограничения
Length
илиRegex
могут быть совсем неуспешными с исключением UnexpectedValueException, если реальное значение не является строкой, как требуетсяType
. - вы можете получить множество сообщений ошибок для одного свойства.
- вы можете сделать бесполезный и сложный внешний вызов для геолокализации адресс, а формат не будет валиден.
Вы можете валидировать каждое из этих ограничений последовательно, чтобы решить эти проблемы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
// src/Localization/Place.php
namespace App\Localization;
use App\Validator\Constraints as AcmeAssert;
use Symfony\Component\Validator\Constraints as Assert;
class Place
{
#[Assert\Sequentially([
new Assert\NotNull,
new Assert\Type('string'),
new Assert\Length(min: 10),
new Assert\Regex(Place::ADDRESS_REGEX),
new AcmeAssert\Geolocalizable,
])]
public string $address;
}
Опции
constraints
тип: array
[опция по умолчанию ]
Эта обязательная опция является массивом ограничений валидации, которые вы хотите применять последовательно.
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
Эта опция может быть использована, чтобы добавить к ограничению произвольные данные, относящиеся к домену. Сконфигурированная нагрузка не используется компонентом Валидатор, но его обработка полностью зависит от вас.
Например, вы можете захотеть исользовать несколько уровней ошибок, чтобы представить неудачные ограничения в фронт-энде по-разному, в зависимости от степени сложности ошибки.