Ссылка на Symfony Circular

У меня есть следующие настройки

Entity/User
---------------
/**
* @ORM\ManyToMany(targetEntity="App\Entity\UserGroup", mappedBy="users")
*/
private $userGroups;


Entity/UserGroup
---------------
/**
* @ORM\ManyToMany(targetEntity="App\Entity\User", inversedBy="userGroups")
*/
private $users;

как видите, у меня есть manyTomany двунаправленное отношение,

  • пользователь принадлежит к нескольким группам
  • группа может иметь несколько пользователей

когда я сериализирую отношения (чтобы обслужить запрос API),

Я получаю глубоко вложенный объект JSON

$groups = $this->entityManager
->getRepository(UserGroup::class)
->findAll();
$normalizer = new ObjectNormalizer();
$normalizer->setCircularReferenceLimit(1);

$normalizer->setCircularReferenceHandler(function ($object) {
return $object->getId();
});

$encoder = new JsonEncoder();
$serializer = new Serializer(array($normalizer), array($encoder));

$groups = $serializer->serialize($groups, 'json');
return View::create(json_decode($groups, true), Response::HTTP_OK);

выход

Как я могу это исправить?

0

Решение

Вы можете попробовать использовать @Groups() аннотация, чтобы указать, какие свойства ваших объектов вы хотите сериализовать в зависимости от контекста.

https://symfony.com/doc/current/components/serializer.html#attributes-groups

Поэтому, когда вы сериализуете свой объект, передайте массив с группами

$groups = $serializer->serialize($groups, 'json', ['groups' => 'user_groups.index']);

А в вашей сущности вы добавляете группу в свойства, которые хотите включить

 Entity/UserGroup
---------------
/**
* @ORM\ManyToMany(targetEntity="App\Entity\User", inversedBy="userGroups")
* @Groups({"user_groups.index"})
*/
private $users;
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]