使用FOSRestBundle / JMSSerializerBundle

时间:2015-05-12 10:26:42

标签: php symfony fosrestbundle jmsserializerbundle

我有一个使用FOSRestBundle创建的简单REST api,并使用JMSSerializerBundle返回序列化对象。

我的捆绑包中的一个实体使用位于另一个捆绑包中的实体。

我为我的实体设置了序列化组,但显然没有为聚合实体设置它们,因此它的json结果为空。

我已经按照YAML组配置的文档:http://jmsyst.com/libs/serializer/master/reference/yml_reference但该文件似乎未使用(向实体的属性添加组没有任何效果,如果我的YAML文件是,我不会收到任何错误无效的)。

以下是代码:

  

MyCompany的\ MyBundle \实体\ 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
}
  

MyCompany的\ MyBundle \资源\配置\串行\ Model.Point.yml

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

MyCompany的\ MyBundle \控制器\ 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":{}}

1 个答案:

答案 0 :(得分:0)

对于遇到此问题的其他人,我发现此示例中的View注释不起作用。但是,如果我在控制器操作中使用正确的组设置序列化上下文,那么它的工作正常:

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