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

Атрибут Groups

Атрибут Groups вешается на свойство или метод класса и позволяет указать, к каким группам сериализации относится это свойство. Первым параметром передаётся массив имён групп. При сериализации Symfony включает в результат только те свойства, которые входят в указанные группы. Это позволяет гибко управлять составом выходных данных без создания отдельных классов.

Синтаксис

#[Groups(['group_name'])]

Пример

Давайте создадим сущность Article с двумя группами: 'list' и 'detail':

<?php namespace AppEntity; use SymfonyComponentSerializerAnnotationGroups; class Article { #[Groups(['list', 'detail'])] public string $title = 'hello'; #[Groups(['detail'])] public string $text = 'abcde'; #[Groups(['list', 'detail'])] public integer $views = 100; } ?>

Теперь сериализуем объект с группой 'list':

<?php namespace AppController; use AppEntityArticle; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentSerializerSerializerInterface; use SymfonyComponentSerializerAnnotationGroups; class ArticleController extends AbstractController { public function index(SerializerInterface $serializer): Response { $article = new Article(); $res = $serializer->serialize( $article, 'json', [Groups::class => ['list']] ); return new Response($res); } } ?>

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

{"title":"hello","views":100}

Пример

Давайте сериализуем тот же объект с группой 'detail':

<?php namespace AppController; use AppEntityArticle; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentSerializerSerializerInterface; use SymfonyComponentSerializerAnnotationGroups; class ArticleController extends AbstractController { public function index(SerializerInterface $serializer): Response { $article = new Article(); $res = $serializer->serialize( $article, 'json', [Groups::class => ['detail']] ); return new Response($res); } } ?>

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

{"title":"hello","text":"abcde","views":100}

Пример

Атрибут Groups можно комбинировать с атрибутом SerializedName для переименования полей:

<?php namespace AppEntity; use SymfonyComponentSerializerAnnotationGroups; use SymfonyComponentSerializerAnnotationSerializedName; class Article { #[Groups(['list'])] #[SerializedName('article_title')] public string $title = 'hello'; #[Groups(['list'])] public integer $views = 100; } ?>

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

{"article_title":"hello","views":100}

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

  • атрибут SerializedName,
    который переименовывает свойство при сериализации
  • атрибут Ignore,
    который исключает свойство из сериализации
  • атрибут MaxDepth,
    который ограничивает глубину вложенности
  • метод serialize,
    который выполняет сериализацию объекта
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить