2015-05-12 55 views
2

我使用FOSRestBundle創建了一個簡單的REST api,並使用JMSSerializerBundle返回序列化對象。使用FOSRestBundle/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 \資源\ CONFIG \串行\ 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":{}} 

回答

0

對於遇到此問題的其他人,我發現此示例中的View註釋不起作用。但是,如果我在控制器動作中設置了正確組的序列化上下文,那麼它工作得很好:

 $view->setSerializationContext(SerializationContext::create()->setGroups('site')); 
相關問題