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;
}

我的问题如下:

  • 此代码位于 aBackendController中,不包含任何特定于 gui 的信息。所以只是一个 RESTful API。
  • 在另一个控制器中,假设WebappController我有代码可以访问这些后端函数并使用 twig-files 和render()-methods 做一些事情。
  • 我想通过ajax上的移动设备访问所有这些信息(因此我需要这个 json 返回值)

这里的最佳做法是什么?最好说:好吧,如果它是一个ajax调用(检查if($request->isXmlHttpRequest())),在返回repsonse之前做jsonify,如果它不返回实体(我需要twig-templates的实体..)还是有另一种方法?

$request->getFormatType()或者使用并进行ajax调用 是否更好contentType="application/json; charset=utf-8"

4

2 回答 2

0

这是 KnpBundles 处理它的方式https://github.com/KnpLabs/KnpBundles/blob/master/src/Knp/Bundle/KnpBundlesBundle/Controller/DeveloperController.php#L35

于 2013-02-19T20:18:51.457 回答
0

我想你需要弄清楚你的意图是什么。因为现在看起来好像你WebappController只是你的客户Backendcontroller。就像是:

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

然后,您只需继续解码 json。

这当然是一些额外的开销。如果您想获取实体,我建议为您的所有后端方法创建一个服务并在那里返回实体。然后,您只需从您的BackendController和您的WebappController. 然后,您只需将您的实体 jsonifyBackendController并在您的WebappController.

于 2013-02-21T17:11:13.273 回答