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

Метод getMetadataFor

Метод getMetadataFor принадлежит классу Validator и возвращает объект ClassMetadataInterface, который содержит все ограничения (constraints), назначенные классу и его свойствам. Первым параметром передаётся имя класса или объект, для которого нужно получить метаданные. Вторым необязательным параметром можно передать имя группы валидации. Метод удобен, когда нужно программно изучить, какие правила валидации навешаны на сущность.

Синтаксис

public function getMetadataFor($value, ?array $groups = null): MetadataInterface

Пример

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

<?php namespace AppEntity; use SymfonyComponentValidatorConstraints as Assert; class Article { #[AssertNotBlank] #[AssertLength(min: 3, max: 100)] private string $title; #[AssertNotBlank] private string $text; #[AssertPositive] private int $views = 0; } ?>

Теперь получим метаданные этого класса через валидатор:

<?php namespace AppController; use AppEntityArticle; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentValidatorValidation; class ArticleController extends AbstractController { public function index(): Response { $validator = Validation::createValidator(); $metadata = $validator->getMetadataFor(Article::class); $props = array_keys($metadata->getConstrainedProperties()); return new Response(implode(', ', $props)); } } ?>

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

"title, text, views"

Пример

Давайте выведем количество ограничений для конкретного свойства сущности:

<?php namespace AppController; use AppEntityArticle; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentValidatorValidation; class ArticleController extends AbstractController { public function index(): Response { $validator = Validation::createValidator(); $metadata = $validator->getMetadataFor(Article::class); $prop = $metadata->getPropertyMetadata('title'); $count = count($prop[0]->getConstraints()); return new Response((string) $count); } } ?>

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

"2"

Пример

Давайте переберём все ограничения свойства и выведем их имена классов:

<?php namespace AppController; use AppEntityArticle; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentValidatorValidation; class ArticleController extends AbstractController { public function index(): Response { $validator = Validation::createValidator(); $metadata = $validator->getMetadataFor(Article::class); $names = []; foreach ($metadata->getConstrainedProperties() as $property) { foreach ($metadata->getPropertyMetadata($property) as $prop) { foreach ($prop->getConstraints() as $constraint) { $names[] = (new ReflectionClass($constraint))->getShortName(); } } } return new Response(implode(', ', $names)); } } ?>

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

"NotBlank, Length, NotBlank, Positive"

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

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