2017-08-07 8 views
0

私はリソースを返すが、いくつかのプロパティを公開するだけの小さなAPIを構築するためにFOSRest Bundleを使用しています。 私はSymfonyのデフォルトシリアライザを使用しています。ここでSymfony2、FOSRestBundle:シリアライゼーショングループが空に戻ります

は私の実体である:

class myEntity 
{ 
    private foo; 

    * @Groups({"myGroup"}) 
    private bar; 

    getFoo(){...} 
    getBar{...} 
} 

そして、私のコントローラ:

* @ParamConverter("myEntity ") 
public function getAction(myEntity $myEntity) 
{  
    $context = new Context(); 
    $context->addGroups('myGroup'); 

    $view = $this->view($myEntity, 200)->setTemplate("default/myEntity.html.twig")->setTemplateVar('myEntity'); 
    $view->setContext($context); 

    return $this->handleView($view); 
} 

私は私のコントローラを実行しようとすると、私は応答として空のオブジェクトを取得します:{} 私は削除した場合setContext()部分は、私が望んでいないプロパティを含む私の全体のエンティティを取得します。

私は間違っていますか? おかげで、すべてのコントローラの

+0

あなたは、APIを構築している:あなたはこのように、あなたはシリアル化の設定をすべてを先送りにするディレクトリを指定する必要があなたのconfig.ymlファイルでJMSシリアライザの構成では

AppBundle\Entity\EntityClass: exclusion_policy: ALL 

?このような場合は、これを行うことをお勧めします: $ context = new SerializationContext(); $ context-> setGroups( "myGroup");$ json = $ this-> get( "シリアライザ") - > serialize($ result、 'json'、$ context); return新しいJsonResponse($ json、200、[]、true); – Vladislav

答えて

0

まずあなたが応答としてFOSRestController を拡張する必要がありますJsonResponseを返すことができ、このように:

$context = new SerializationContext(); 
$context->setGroups("myGroup"); 
$json = $this->get("serializer")->serialize($result, 'json', $context); 
return new JsonResponse($json, 200, [], true); 

私としても、YAMLファイルにあなたのシリアライザの設定を移動することをお勧めいたします上記のhere

exclusion_policyを使用すると、すべてのプロパティがデフォルトで除外され、特定のグループに追加されます。

jms_serializer: 
    metadata: 
     directories: 
      APP: 
       namespace_prefix: "AppBundle" 
       path: "@AppBundle/Resources/config/serializer/" 
+0

あなたの答えをありがとう。私のコントローラは 'FOSRestController'を拡張しますが、私はさまざまな理由でjms_serializerを使用していません。また、私はfosrestのリターンシンタックスを使用したいと思います( '$ view = $ this-> view($ myEntity、200) - > setTemplate(" default/myEntity.html.twig ") - > setTemplateVar( 'myEntity '); ') – AdrienXL

関連する問題