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

Класс ConstraintViolationList

Класс ConstraintViolationList представляет собой коллекцию объектов ConstraintViolationInterface, которые возникают при нарушении ограничений валидации. Объект этого класса возвращается методом validate сервиса Validator и содержит все ошибки, найденные при проверке сущности или отдельного значения. Класс реализует интерфейсы ConstraintViolationListInterface, IteratorAggregate и Countable, что позволяет перебирать нарушения в цикле foreach и получать их количество через функцию count.

Синтаксис

<?php use Symfony\Component\Validator\ConstraintViolationList; $list = new ConstraintViolationList(); ?>

Пример

Давайте создадим список нарушений и добавим в него одно нарушение:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Validator\ConstraintViolation; use Symfony\Component\Validator\ConstraintViolationList; class ArticleController extends AbstractController { #[Route('/article', name: 'article_index')] public function index(): Response { $list = new ConstraintViolationList(); $violation = new ConstraintViolation( 'This value should not be blank.', null, [], null, 'text', null ); $list->add($violation); return new Response((string) count($list)); } } ?>

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

1

Пример

Давайте провалидируем сущность и переберём все нарушения:

<?php namespace App\Entity; use Symfony\Component\Validator\Constraints as Assert; class Article { #[Assert\NotBlank] public string $title = ''; #[Assert\NotBlank] #[Assert\Length(min: 5)] public string $text = ''; } ?>

Теперь получим список нарушений через сервис Validator:

<?php namespace App\Controller; use App\Entity\Article; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Validator\Validator\ValidatorInterface; class ArticleController extends AbstractController { #[Route('/article', name: 'article_index')] public function index(ValidatorInterface $validator): Response { $article = new Article(); $list = $validator->validate($article); $res = []; foreach ($list as $violation) { $res[] = $violation->getPropertyPath() . ': ' . $violation->getMessage(); } return new Response(implode('<br>', $res)); } } ?>

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

title: This value should not be blank.<br>text: This value should not be blank.

Пример

Давайте проверим наличие нарушений через метод has и получим первое из них через метод get:

<?php namespace App\Controller; use App\Entity\Article; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Validator\Validator\ValidatorInterface; class ArticleController extends AbstractController { #[Route('/article', name: 'article_index')] public function index(ValidatorInterface $validator): Response { $article = new Article(); $list = $validator->validate($article); if ($list->has(0)) { return new Response($list->get(0)->getMessage()); } return new Response('no violations'); } } ?>

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

This value should not be blank.

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

  • класс Validator,
    который выполняет валидацию объектов и значений
  • метод validate,
    который возвращает объект ConstraintViolationList
  • метод add,
    который добавляет нарушение в список
  • метод __toString,
    который возвращает строковое представление списка
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить