У меня есть следующие настройки
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);
Как я могу это исправить?
Вы можете попробовать использовать @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;
Других решений пока нет …