Класс 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,
который возвращает строковое представление списка