Метод validate
Метод validate класса Validator выполняет проверку
переданного объекта на соответствие всем ограничениям валидации,
которые были заданы в его классе с помощью атрибутов или
конфигурационных файлов. Первым параметром метод принимает
сам объект для проверки. Вторым необязательным параметром
можно передать массив групп валидации. Метод возвращает
объект ConstraintViolationList, содержащий все найденные
нарушения. Если объект прошёл проверку, список будет пустым.
Синтаксис
public function validate(mixed $value, ?array $groups = null, mixed $payload = null): ConstraintViolationListInterface
Пример
Давайте создадим сущность Article с ограничениями на поля
и проверим её с помощью метода validate:
<?php
namespace App\Entity;
use Symfony\Component\Validator\Constraints as Assert;
class Article
{
#[Assert\NotBlank]
#[Assert\Length(min: 3)]
public string $title = '';
#[Assert\NotBlank]
#[Assert\Length(min: 5)]
public string $text = '';
#[Assert\Positive]
public int $views = 0;
}
?>
Теперь создадим валидатор и проверим объект с корректными данными:
<?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/validate', name: 'article_validate')]
public function validate(ValidatorInterface $validator): Response
{
$article = new Article();
$article->title = 'abcde';
$article->text = 'article text';
$article->views = 10;
$res = $validator->validate($article);
return new Response('Violations count: ' . count($res));
}
}
?>
Результат выполнения кода:
"Violations count: 0"
Пример
Давайте проверим объект с некорректными данными:
<?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/validate-invalid', name: 'article_validate_invalid')]
public function validateInvalid(ValidatorInterface $validator): Response
{
$article = new Article();
$article->title = 'ab';
$article->text = '';
$article->views = -5;
$res = $validator->validate($article);
$messages = [];
foreach ($res as $violation) {
$messages[] = $violation->getMessage();
}
return new Response(implode(', ', $messages));
}
}
?>
Результат выполнения кода:
"This value is too short. It should have 3 characters or more., This value should not be blank., This value should be positive."
Пример
Давайте проверим объект с указанием конкретной группы валидации:
<?php
namespace App\Entity;
use Symfony\Component\Validator\Constraints as Assert;
class Article
{
#[Assert\NotBlank(groups: ['create'])]
#[Assert\Length(min: 3, groups: ['create', 'update'])]
public string $title = '';
#[Assert\NotBlank(groups: ['create'])]
public string $text = '';
#[Assert\Positive(groups: ['update'])]
public int $views = 0;
}
?>
Теперь проверим объект только по группе 'create':
<?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/validate-group', name: 'article_validate_group')]
public function validateGroup(ValidatorInterface $validator): Response
{
$article = new Article();
$article->title = 'abcde';
$article->text = 'article text';
$article->views = -5;
$res = $validator->validate($article, null, ['create']);
return new Response('Violations count: ' . count($res));
}
}
?>
Результат выполнения кода:
"Violations count: 0"
Смотрите также
-
класс
Validator,
который выполняет валидацию объектов -
метод
validateProperty,
который проверяет одно свойство объекта -
метод
validatePropertyValue,
который проверяет значение свойства без объекта -
класс
ConstraintViolationList,
который хранит список найденных нарушений