Класс Validator
Класс Validator является центральным элементом компонента Validator.
Он принимает объект и проверяет его свойства на соответствие
ограничениям, заданным через атрибуты. Первым параметром
передаётся объект для валидации, вторым - массив групп валидации.
Метод validate возвращает объект ConstraintViolationList
со списком найденных нарушений.
Синтаксис
use Symfony\Component\Validator\Validation;
$validator = Validation::createValidator();
$violations = $validator->validate($object, $groups);
Пример
Давайте создадим простую сущность с ограничениями
и проверим её через Validator:
<?php
namespace App\Entity;
use Symfony\Component\Validator\Constraints as Assert;
class Article
{
#[Assert\NotBlank]
#[Assert\Length(min: 3)]
public string $title = '';
#[Assert\NotBlank]
public string $text = '';
}
?>
Теперь проверим объект с пустыми полями:
<?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\Validation;
class ArticleController extends AbstractController
{
#[Route('/article/validate', name: 'article_validate')]
public function validate(): Response
{
$article = new Article();
$validator = Validation::createValidator();
$violations = $validator->validate($article);
$res = [];
foreach ($violations as $violation) {
$res[] = $violation->getMessage();
}
return new Response(json_encode($res));
}
}
?>
Результат выполнения кода:
["This value should not be blank.", "This value should not be blank."]
Пример
Давайте заполним поля корректными данными и снова выполним валидацию:
<?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\Validation;
class ArticleController extends AbstractController
{
#[Route('/article/validate-ok', name: 'article_validate_ok')]
public function validateOk(): Response
{
$article = new Article();
$article->title = 'abcde';
$article->text = 'article';
$validator = Validation::createValidator();
$violations = $validator->validate($article);
$res = [];
foreach ($violations as $violation) {
$res[] = $violation->getMessage();
}
return new Response(json_encode($res));
}
}
?>
Результат выполнения кода:
[]
Пример
Давайте проверим только одно свойство объекта
через метод validateProperty:
<?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\Validation;
class ArticleController extends AbstractController
{
#[Route('/article/validate-property', name: 'article_validate_property')]
public function validateProperty(): Response
{
$article = new Article();
$article->title = 'ab';
$validator = Validation::createValidator();
$violations = $validator->validateProperty($article, 'title');
$res = [];
foreach ($violations as $violation) {
$res[] = $violation->getMessage();
}
return new Response(json_encode($res));
}
}
?>
Результат выполнения кода:
["This value is too short. It should have 3 characters or more."]
Смотрите также
-
метод
validate,
который проверяет объект целиком -
метод
validateProperty,
который проверяет одно свойство объекта -
класс
ConstraintViolationList,
который хранит список нарушений -
класс
Validation,
который создаёт экземпляр валидатора