Sequentially

Дата обновления перевода 2023-01-13

Sequentially

Это ограничение позволяет вам применять набор правил, которые должны быть валидированы пошагово, позволяя прерывание валидации, как только будет обнаружено первое нарушение.

В качестве альтернативы в ситуациях, которые не может решить Sequentially, вы можете рассмотреть использование GroupSequence, которое позволяет больше контроля.

??????????? ? ???????? ??? ??????
????? Sequentially
????????? SequentiallyValidator

Базовое использование

Представьте, что у вас есть объект Place со свойством $address, которое должно соответствовать следующим требованиям:

  • не быть пустой строкой
  • состоять как минимум из 10 знаков
  • иметь конкретный формат
  • быть геолокализируемым с помощью внешнего сервиса

В таких ситуациях вы можете столкнуться с тремя проблемами:

  • ограничения Length или Regex могут быть совсем неуспешными с исключением UnexpectedValueException, если реальное значение не является строкой, как требуется Type.
  • вы можете получить множество сообщений ошибок для одного свойства.
  • вы можете сделать бесполезный и сложный внешний вызов для геолокализации адресс, а формат не будет валиден.

Вы можете валидировать каждое из этих ограничений последовательно, чтобы решить эти проблемы:

  • Attributes
  • YAML
  • XML
  • PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// src/Localization/Place.php
namespace App\Localization;

use App\Validator\Constraints as AcmeAssert;
use Symfony\Component\Validator\Constraints as Assert;

// ВАЖНО: вложенные атрибуты требуют PHP 8.1 или новее
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 $address;
}

Опции

constraints

тип: array [опция по умолчанию ]

Эта обязательная опция является массивом ограничений валидации, которые вы хотите применять последовательно.

groups

type: array | string

It defines the validation group or groups of this constraint. Read more about validation groups.

payload

тип: mixed по умолчанию: null

Эта опция может быть использована, чтобы добавить к ограничению произвольные данные, относящиеся к домену. Сконфигурированная нагрузка не используется компонентом Валидатор, но его обработка полностью зависит от вас.

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