РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
366 of 1361 menu

Атрибут GroupSequence

Атрибут GroupSequence вешается на класс сущности или DTO и определяет последовательность групп валидации. Первым параметром передаётся массив имён групп. Валидатор проверяет группы по порядку и останавливается на первой, в которой найдены ошибки. Это позволяет не выполнять тяжёлые проверки, если не пройдены простые.

Синтаксис

#[GroupSequence(['group1', 'group2', 'group3'])]

Пример

Давайте создадим сущность с двумя группами валидации и зададим их порядок через атрибут GroupSequence:

<?php namespace AppEntity; use SymfonyComponentValidatorConstraints as Assert; use SymfonyComponentValidatorMapping\GroupSequence; #[GroupSequence(['First', 'Second'])] class Article { #[Assert\NotBlank(groups: ['First'])] #[Assert\Length(min: 5, groups: ['Second'])] private string $title = ''; public function setTitle(string $title): void { $this->title = $title; } public function getTitle(): string { return $this->title; } } ?>

Пример

Давайте проверим сущность с пустым заголовком. Валидатор остановится на группе First и не станет проверять длину:

<?php namespace AppController; use AppEntityArticle; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentValidatorValidatorValidatorInterface; class ArticleController extends AbstractController { public function index(ValidatorInterface $validator): Response { $article = new Article(); $errors = $validator->validate($article); foreach ($errors as $error) { echo $error->getMessage(); } return new Response(); } } ?>

Результат выполнения кода:

"This value should not be blank."

Пример

Давайте заполним заголовок короткой строкой. Теперь группа First пройдена, и валидатор перейдёт к группе Second:

<?php namespace AppController; use AppEntityArticle; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentValidatorValidatorValidatorInterface; class ArticleController extends AbstractController { public function index(ValidatorInterface $validator): Response { $article = new Article(); $article->setTitle('abc'); $errors = $validator->validate($article); foreach ($errors as $error) { echo $error->getMessage(); } return new Response(); } } ?>

Результат выполнения кода:

"This value is too short. It should have 5 characters or more."

Смотрите также

  • атрибут Valid,
    который включает каскадную валидацию
  • атрибут Sequentially,
    который задаёт порядок проверки ограничений
  • класс Form,
    который представляет форму в Symfony
  • метод isValid,
    который проверяет валидность формы
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить