2

すべてのレコードを取得してJSONファイルに表示しようとしています。JMSSerializerBundleとSymfony 2 - JSONファイルへのDoctrine/ODMの出力

現在の関数は、特定のユーザーに属するすべてのイベントを取得します。

/** 
* create json files from doctrine/mongo 
* @Route("/createjson", name="createjson") 
*/ 
public function createJson() 
{ 
    // check user authentication 
    $this->denyAccessUnlessGranted('ROLE_USER', null, 'Unable to access this page!'); 
    $dm = $this->get('doctrine_mongodb')->getManager(); 

    $repository = $dm->getRepository('AppBundle:Event'); 
    $events = $repository->findBy(array('user' => $this->getUser())); 

    $serializer = SerializerBuilder::create()->build(); 
    $result = $serializer->deserialize($events, 'AppBundle\Document\Event', 'json'); 
    var_dump($result); 
    exit; 
} 

シリアライザに渡される要素の一部が配列形式であるため、これは機能しません。エラーが発生しています。

Warning: json_decode() expects parameter 1 to be string, array given 
500 Internal Server Error - ContextErrorException 

私は作り付けのsymfonyのシリアライザを使用する場合は、それが正常に動作します:私はJMSSerializerBundleを使用する/必要性をする理由

$serializer = $this->container->get('serializer'); 
    $reports = $serializer->serialize($events, 'json'); 
    return new Response($reports); 

JSONを製造するしかしそれ故に私のドキュメント/エンティティに異なるものになります。例えば

を、レコードは次のようになります。

[{ 
    "id": "572041b3288b560e5e00451c", 
    "name": "Test", 
    "date": "2016-04-27T05:25:00+1000", 
    "enddate": "2016-04-30T11:55:00+1000", 
    "location": { 
     "name": "Sydney, NSW" 
    }, 
    "key": { 
     "id": "1g43g34g34g23f32g32G32gGSDF" 
    }, 
    "user": { 
     "id": "57203174288b560e5e0044da" 
    }, ... 
}] 

しかし、私は唯一の方法は私がこれをやって行くだろう

[{ 
    "id": "572041b3288b560e5e00451c", 
    "name": "Test", 
    "date": "2016-04-27T05:25:00+1000", 
    "location": "Sydney, NSW" 
}] 
JSON

に(出力)を表示したいですか? JMSSerializerBundleオンラインに関する資料はあまりありません。

編集:私が照会しているデータベースコレクションには、FOSUserBundleによって管理されているUserコレクションとの関係があります。しかし

が が

答えて

1
あなたは、バンドルのドキュメントをご覧ください

、あなたはより多くの情報を見つけることがあり、私はこれが私の問題とは関係を持っているかはわからないあなたが使用しているようだ http://jmsyst.com/bundles/JMSSerializerBundle

http://jmsyst.com/libs/serializer/master/usage

シリアライザの間違った機能あなたのケースでは、あなたのユーザオブジェクトからJSONを取得する必要があるようですので、あなたは

$serializer = SerializerBuilder::create()->build(); 
$result = $serializer->serialize($events, 'AppBundle\Document\Event', 'json'); 

serialize($object):stringを使用する必要があります。

deserialize($string):objectオブジェクトから文字列を取得:の表現からオブジェクトを取得しますオブジェクト(json、xml ...)。

+0

ご返信ありがとうございます。あなたが間違っているシリアライザを使用しました。私は '$ result = $ serializer-> deserialize($ events、 'AppBundle \ Document \ Event'、 'json');から' $ result = $ serializer-> serialize($ events、 'json');に変更しました。ドキュメント:http://jmsyst.com/bundles/JMSSerializerBundle#usage ここで私は詰まっている選択されたフィールドだけが表示されるように結果をフィルタリングです。私はドキュメンテーションの中でこれについて何の注意も見つけられず、可能かどうか疑問に思っていました。 ありがとうございました – Brendan

+1

除外システムをご覧ください。http://jmsyst.com/libs/serializer/master/cookbook/exclusion_strategies – olibiaz

関連する問題