【发布时间】:2017-04-20 23:31:45
【问题描述】:
我正在尝试为AJAX 创建高效的JSON 响应控制器。到目前为止,我没有将整个实体传递给JsonResponse,而是创建了包含必要数据的数组,我可以在其中轻松管理输出数据,从而减少JavaScript 的工作量。我的操作如下所示:
public function getOffersAction(Request $request)
{
if (!$request->isXmlHttpRequest()) {
return new JsonResponse(array('message' => 'You can access this only using Ajax!'), 400);
}
/** @var OfferRepository $offerRepository */
$offerRepository = $this->getDoctrine()->getRepository('IndexBundle:Offer');
$offers = $offerRepository->findBy(array('state' => 'available'));
$offersArray = array();
/** @var Offer $offer */
foreach ($offers as $offer) {
$areasArray = array();
foreach ($offer->getAreas() as $area) {
$areasArray[] = array(
'name' => $area->getName()
);
}
$offersArray[] = array(
'id' => $offer->getId(),
'code' => $offer->getCode(),
'title' => $offer->getTitle(),
'city' => $offer->getCity(),
'country' => $offer->getCountry()->getName(),
'latitude' => $offer->getLatitude(),
'longitude' => $offer->getLongitude(),
'areas' => $areasArray
);
}
return new JsonResponse($offersArray, 200);
}
一切都很好,ajax 运行得很快。
此时我开始在谷歌上搜索这是否是正确的方法。我发现了关于序列化实体的JMSSerializerBundle。我尝试使用它,但在序列化关系以及如何使用JS 访问相关实体数据时遇到问题。为JS 留下如此多的处理是如此复杂,以至于我开始怀疑这是一个好方法。
你怎么看?您对此有何经验?哪种方法更好,为什么?
【问题讨论】:
-
你考虑过使用Fractal吗?这是 JMSSerializer 和在控制器中手动构建 JSON 数组之间的一个很好的中间地带。
-
您在使用 JMSSerializerBundle 时遇到了什么问题?这个捆绑包在大多数时候真的很像一个魅力
-
你也可以让你的实体序列化。如果我可以这样说,那将比您现在的方法更容易。可以在此处找到可序列化用户实体的示例:symfony.com/doc/current/security/…
标签: json ajax symfony jsonserializer serialization