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

Атрибут Context

Атрибут Context вешается на свойство или метод сущности и передаёт дополнительные опции в сериализатор при обработке этого свойства. Первым параметром передаётся ассоциативный массив с настройками контекста. Например, можно указать группы сериализации, формат даты или собственную логику обработки. Атрибут работает совместно с классами Serializer и ObjectNormalizer.

Синтаксис

#[Context(context)]

Пример

Давайте создадим сущность Article и укажем для свойства createdAt формат даты через атрибут Context:

<?php namespace AppEntity; use SymfonyComponentSerializerAnnotationContext; class Article { public string $title; public string $text; #[Context([DateTimeNormalizer::FORMAT_KEY => 'Y-m-d'])] public DateTime $createdAt; } ?>

Теперь при сериализации дата будет выведена в формате 'Y-m-d', а не в формате по умолчанию.

Пример

Давайте сериализуем объект Article с помощью Serializer и посмотрим на результат:

<?php namespace AppController; use AppEntityArticle; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentSerializerSerializer; use SymfonyComponentSerializerEncoderJsonEncoder; use SymfonyComponentSerializerNormalizerObjectNormalizer; use SymfonyComponentSerializerNormalizerDateTimeNormalizer; use SymfonyComponentSerializerMappingClassMetadataFactory; class ArticleController extends AbstractController { public function index(): Response { $article = new Article(); $article->title = 'hello'; $article->text = 'article'; $article->createdAt = new DateTime('2024-01-15'); $serializer = new Serializer( [new DateTimeNormalizer(), new ObjectNormalizer()], [new JsonEncoder()] ); $res = $serializer->serialize($article, 'json'); return new Response($res); } } ?>

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

{"title":"hello","text":"article","createdAt":"2024-01-15"}

Пример

Давайте зададим группы сериализации через атрибут Context для разных свойств:

<?php namespace AppEntity; use SymfonyComponentSerializerAnnotationContext; use SymfonyComponentSerializerAnnotationGroups; class Article { #[Groups(['public'])] public string $title; #[Groups(['internal'])] public string $text; #[Context([AbstractNormalizer::GROUPS => ['public']])] public string $author; } ?>

Свойство author будет включено в вывод только при сериализации с группой 'public', заданной через контекст.

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

  • класс Serializer,
    который выполняет сериализацию и десериализацию
  • метод serialize,
    который превращает объект в строку формата
  • метод denormalize,
    который восстанавливает объект из массива
  • атрибут Groups,
    который задаёт группы сериализации
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить