我正在尝试为我的 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;
}
我的问题如下:
- 此代码位于 a
BackendController
中,不包含任何特定于 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"