Symfony2 - 关系为json响应的实体

时间:2016-12-06 10:47:17

标签: json ajax symfony jsonserializer serializer

我正在尝试为JSON创建高效的AJAX响应控制器。到目前为止,我没有将整个实体传递给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做了很多处理,我开始怀疑这是一个好方法。

你怎么看?你有什么经历?哪种方法更好,为什么?

1 个答案:

答案 0 :(得分:0)

我更喜欢symfony规范化器/序列化器方法。 http://symfony.com/doc/current/components/serializer.html 如上所述,您可以覆盖序列化程序,以便以相同的自定义方式为整个应用程序序列化对象

enter image description here