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

Метод validatePropertyValue

Метод validatePropertyValue класса Validator позволяет проверить значение конкретного свойства без необходимости валидировать весь объект целиком. Первым параметром передаётся имя класса или сущности, вторым - имя свойства, третьим - само значение для проверки. Метод возвращает объект ConstraintViolationList, содержащий список найденных нарушений.

Этот метод удобен, когда нужно проверить одно поле формы, значение из API-запроса или динамически изменяемое свойство, не затрагивая остальные данные.

Синтаксис

$validator->validatePropertyValue( string|object $objectOrClass, string $propertyName, mixed $value, Constraint[]|null $groups = null ): ConstraintViolationListInterface

Пример

Давайте создадим сущность с ограничениями и проверим значение свойства title:

<?php namespace App\Entity; use Symfony\Component\Validator\Constraints as Assert; class Article { #[Assert\NotBlank] #[Assert\Length(min: 3, max: 255)] private string $title = ''; #[Assert\NotNull] #[Assert\Positive] private int $views = 0; } ?>

Теперь проверим значение свойства title через валидатор:

<?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 { $res = $validator->validatePropertyValue( Article::class, 'title', 'ab' ); if (count($res) > 0) { return new Response((string) $res[0]->getMessage()); } return new Response('valid'); } } ?>

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

"This value is too short. It should have 3 characters or more."

Пример

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

<?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-ok', name: 'article_validate_ok')] public function validateOk(ValidatorInterface $validator): Response { $res = $validator->validatePropertyValue( Article::class, 'title', 'article' ); if (count($res) > 0) { return new Response((string) $res[0]->getMessage()); } return new Response('valid'); } } ?>

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

"valid"

Пример

Метод также работает с объектом, а не только с именем класса. Давайте передадим экземпляр сущности и проверим свойство views:

<?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-views', name: 'article_validate_views')] public function validateViews(ValidatorInterface $validator): Response { $article = new Article(); $res = $validator->validatePropertyValue( $article, 'views', -5 ); if (count($res) > 0) { return new Response((string) $res[0]->getMessage()); } return new Response('valid'); } } ?>

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

"This value should be positive."

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

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