2016-04-19 15 views
0

私はSymfony2アプリケーションで作業しています。私がやろうとしているのは、レスポンスから不要なフィールドを削除し、必要なフィールドだけを表示することです。Json Responseからのプロキシの削除Symfony2

私のJSONは次のようになります。ヌル、 "クローナー ":ヌル、" をisInitialized ":真とタイムゾーンオブジェクトを非表示にし、私は" 初期化子" のようなフィールドを削除したい

[ 
    { 
    "id": 1, 
    "title": "Granit", 
    "typeId": { 
     "id": 1, 
     "name": "X or Y", 
     "acroname": "xory", 
     "__initializer__": null, 
     "__cloner__": null, 
     "__isInitialized__": true 
    }, 
    "pushDate": { 
     "timezone": { 
     "name": "Europe/Berlin", 
     "location": { 
      "country_code": "DE", 
      "latitude": 52.5, 
      "longitude": 13.36666, 
      "comments": "most locations" 
     } 
     }, 
     "offset": 7200, 
     "timestamp": 1460584800 
    }, 
    "addedAt": { 
     "timezone": { 
     "name": "Europe/Berlin", 
     "location": { 
      "country_code": "DE", 
      "latitude": 52.5, 
      "longitude": 13.36666, 
      "comments": "most locations" 
     } 
     }, 
     "offset": 7200, 
     "timestamp": 1460548644 
    }, 
    "deviceToShow": { 
     "id": 2, 
     "name": "Mobile", 
     "__initializer__": null, 
     "__cloner__": null, 
     "__isInitialized__": true 
    }, 
    "statusSurvey": false, 
    "slides": [ 
     { 
     "id": 1, 
     "title": "First Question", 
     "picture1": "160413015724bazinga2.jpg", 
     "picture2": "160413015724th.jpg", 
     "idSurvey": 1, 
     "absolutePathpic1": "C:\\xampp\\htdocs\\stu-wrapper\\src\\AppBundle\\Entity/../../../web/uploads/slideSurvey/160413015724bazinga2.jpg", 
     "webPathpic1": "uploads/slideSurvey/160413015724bazinga2.jpg", 
     "absolutePathpic2": "C:\\xampp\\htdocs\\stu-wrapper\\src\\AppBundle\\Entity/../../../web/uploads/slideSurvey/160413015724th.jpg", 
     "webPathpic2": "uploads/slideSurvey/160413015724th.jpg", 
     "file": null, 
     "file1": null 
     } 
    ], 
    "categories": [] 
    } 
] 

「タイムスタンプ」のみを表示します。

ここで私はJson Responseをシリアル化して作成しているコントローラです。

public function getAction() 
    { 
     $em = $this->getDoctrine()->getManager(); 
     $survey = $em->getRepository ('AppBundle:Survey')->findAll(); 

     if (!$survey) { 
      throw $this->createNotFoundException ('Data not found.'); 
     } 
     $encoder = new JsonEncoder(); 
     $normalizer = new ObjectNormalizer(); 
     $normalizer->setCircularReferenceHandler (function ($survey) { 
      return $survey->getid(); 
     }); 


     $serializer = new Serializer(array ($normalizer), array ($encoder)); 

     $jsonContent = $serializer->serialize ($survey, 'json'); 

     return new Response($jsonContent); 
    } 

ありがとうございます。

+0

だから、Doctrine2は怠惰なロードされるすべての関係のプロキシクラスを作成します。そして、この操作を完全に構成することができます。エンティティを別のデータ(xml/json)に変換するためのカスタムシリアライザ/エンコーダ/コンバータを作成する必要があります。 – ZhukV

答えて

0

デタッチエンティティは、このフィールドを除外するために、オブジェクトに

$em->detach($survey); 
+1

ありがとうございました。私はJMSSerializerBundleのみを使用し、この問題を処理しました。 –

0

てみてくださいdoctrine2リンクを削除するには:

$normalilzer->setIgnoredAttributes(
    [ 
     "__initializer__", 
     "__cloner__", 
     "__isInitialized__" 
    ]); 
関連する問題