Атрибут 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,
который проверяет валидность формы