Symfony2 - 具有关系的实体作为 json 响应

Posted

技术标签:

【中文标题】Symfony2 - 具有关系的实体作为 json 响应【英文标题】:Symfony2 - entities with relationships as json response 【发布时间】: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/… 【参考方案1】:

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

【讨论】:

以上是关于Symfony2 - 具有关系的实体作为 json 响应的主要内容,如果未能解决你的问题,请参考以下文章

Symfony2 JSON 示例

Symfony2 OneToMany 关系

动态表单(切换实体)symfony2

在 Symfony2 中检测实体配置错误

Symfony2与列的实体关系

如何在 Symfony2 中将 Json 绑定到实体中