0

次のコントローラー/アクションがあります。

 public function messagesAction()
  {
    $encoders = array(new JsonEncoder());
    $normalizers = array(new GetSetMethodNormalizer());
    $serializer = new Serializer($normalizers, $encoders);
    $message = $this->getDoctrine()
      ->getRepository('AcmeStoreBundle:Message')
      ->findAll();
    $response = new Response($serializer->serialize($message, 'json')); 
    $response->headers->set('Content-Type', 'application/json');
    return $response;
  }
}

次のjsonを送信します。

[
    {
        "id": 1,
        "iam": 1,
        "youare": 2,
        "lat": 50.8275853,
        "lng": 4.3809764,
        "msgbody": "Lorem ipsum lorem ipsum lorem ipsum"
    },
    {
        "id": 2,
        "iam": 1,
        "youare": 2,
        "lat": 50.8307348,
        "lng": 4.3734823,
        "msgbody": "What up?"
    }
]

名前付きのキーがなく、Javascript fw (Ember) がいくつかのオブジェクトを取得するのが難しくなります。

Json 出力を次のように変更したいと思います。

[
    {
      "message": {
        "id": "1",
        "iam": "male",
        "youare": "female",
        "lat": "50.8307348"
      }
    }
]

遊べる正規表現があることは知っていますが、どこにあるかはわかりません。ご覧のとおり、標準のすぐに使えるシリアライザーを使用しています (これが有効な Json を返す唯一の方法でした)。私がやりたいことをするためのオプションが付属していますか? (ボーナス:送信する前にデータを操作することもできます..)

4

1 に答える 1

0

この種の問題を解決するために、データをさまざまな形式にエクスポートする sf2 バンドルを開発しました。小枝テンプレートだけで出力をカスタマイズできます。

https://github.com/IDCI-Consulting/ExporterBundle

これが役に立つことを願っています。

于 2013-02-16T14:25:22.900 に答える