Настройка групп сериализации для сущности в другом комплекте с помощью FOSRestBundle / JMSSerializerBundle

У меня есть простой REST API, созданный с использованием FOSRestBundle, и возвращает сериализованные объекты с использованием JMSSerializerBundle.

Одна из сущностей моего комплекта использует сущность, расположенную в другом комплекте.

Я настроил группы сериализации для своей сущности, но они явно не настроены для агрегированной сущности, поэтому ее результат json пуст.

Я следовал за документацией для конфигурации групп YAML: http://jmsyst.com/libs/serializer/master/reference/yml_reference но файл, кажется, не используется (добавление групп в свойства сущности не имеет никакого эффекта, и я не получаю никаких ошибок, если мой файл YAML недействителен).

Вот код:

MyCompany \ MyBundle \ Entity \ Meeting.php

class Meeting
{
/**
* @var Point
*
* @ORM\Column(name="location", type="point", nullable=true)
* @JMS\Groups({"privateContact"})
*/
private $location;

// Getters, setters and other stuff
}

ACME \ SomeBundle \ ORM \ Point.php

class Point
{
/**
* @var float
*/
private $latitude;

/**
* @var float
*/
private $longitude;

// Getters, setters
}

Моякомп \ MyBundle \ Resources \ Config \ сериализатору \ Model.Point.yml

ACME\SomeBundle\ORM\Point:
properties:
latitude:
groups: ['privateContact']
longitude:
groups: ['privateContact']

MyCompany \ MyBundle \ Controller \ ApiController.php

/**
* @Rest\View(serializerGroups={"privateContact"})
*/
public function getMeetingAction()
{
...

return array(
'status' => 'OK',
'meeting' => $meeting
);
}

Результирующий JSON

"meeting":{"id":10,"date":"2015-07-16T19:20:00+0200","location":{}}

2

Решение

Для всех, кто сталкивался с этой проблемой, я обнаружил, что аннотация View в этом примере не работает. Однако, если я установил контекст сериализации с правильной группой в действии контроллера, то все заработало просто отлично:

$view->setSerializationContext(SerializationContext::create()->setGroups('site'));
0

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

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

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