У меня есть простой 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":{}}
Для всех, кто сталкивался с этой проблемой, я обнаружил, что аннотация View в этом примере не работает. Однако, если я установил контекст сериализации с правильной группой в действии контроллера, то все заработало просто отлично:
$view->setSerializationContext(SerializationContext::create()->setGroups('site'));
Других решений пока нет …