2

Symfony2 アプリケーション用の安らかな JSON API を構築しようとしています。

http://jmsyst.com/libs/serializer JMS\Serializer Bundle を使用して、エンティティを にシリアル化していJSONます。

私はこの例を持っていますController-Action:

public function getFarmerByNameAction(Request $request) {
    $this->setLocale($request);

    $name = $request->get("name");
    $farmer = $this->getDoctrine()->getRepository("FarmerguideBackendBundle:Farmer")->findByName($name);

    // Return json response
    return new Response($this->jsonify($farmer));
}

私はこのシリアライザーを頻繁に使用しているため (シングルトンなどを実行する必要があることはわかっていますが、現在はその時間がなく、フレームワークで遊んでいただけです)、コードをシリアライズを行う関数。

private function jsonify($object) {
        // Serialize to json
        $serializer = new Serializer(array(new GetSetMethodNormalizer()), array('json' => new
                JsonEncoder()));
        $json = $serializer->serialize($object, 'json');
        return $json;
}

私の問題は次のとおりです。

  • このコードは の中にありBackendController、GUI 固有の情報は含まれていません。つまり、単なる RESTful API です。
  • 別のコントローラーで、WebappControllerこれらのバックエンド関数にアクセスし、小枝ファイルと方法でいくつかのことを行うコードがあるとしましょうrender()
  • これらすべての情報にモバイル経由で ajax 経由でアクセスしたい(したがって、この json 戻り値が必要です)

ここでのベストプラクティスは何ですか? それが ajax-call (check with if($request->isXmlHttpRequest())) である場合は、レスポンスを返す直前に jsonify を実行し、そうでない場合はエンティティを返します (twig-templates のエンティティが必要です..) または別のアプローチはありますか?

それとも、一緒に作業し$request->getFormatType()て ajax 呼び出しを行う 方が良いですか?contentType="application/json; charset=utf-8"

4

2 に答える 2

0

私はあなたがあなたの意図が何であるかを明確にする必要があると思います。今のところ、あなたWebappControllerはあなたのクライアントであるかのように見えるからBackendcontrollerです。何かのようなもの:

$result = file_get_contents('/path/to/backend/method/1/3');

次に、先に進んでjsonをデコードします。

もちろん、これは追加のオーバーヘッドです。エンティティを取得する場合は、すべてのバックエンドメソッドのサービスを作成し、そこにエンティティを返すことをお勧めします。BackendController次に、あなたとあなたのからそれらのメソッドを呼び出すだけですWebappController。次に、のエンティティのみをjsonifyし、BackendControllerの適切なテンプレートをレンダリングしますWebappController

于 2013-02-21T17:11:13.273 に答える
0

KnpBundles がそれを処理する方法は次のとおりですhttps://github.com/KnpLabs/KnpBundles/blob/master/src/Knp/Bundle/KnpBundlesBundle/Controller/DeveloperController.php#L35

于 2013-02-19T20:18:51.457 に答える