Symfony2 - Json响应 - 生成URL

时间:2015-08-17 17:03:26

标签: json symfony

从Controller Action生成Json响应的正确方法是什么?

例如,以下操作位于返回Json的控制器中。

function listAction() 
{
    ...

    $results = array();
    foreach ($orders[ 'results' ] AS $i => $row) {
        $results[ $i ] = [
            'order_name' => $row[ 'order' ]['name'],
            'shop_name' => $row[ 'order']['shop'][ 'name' ],
            'product_name' => $row[ 'product' ][ 'name' ],
            'url_shop_show' => $this->generateUrl('Shop_Show', array(
                'shop_id' => $row[ 'order' ][ 'shop' ][ 'id' ],
                'shop_slug' => $row[ 'order' ][ 'shop' ][ 'slug' ],
            )),
            'url_product_show' => $this->generateUrl('Product_Show', array(
                'product_id' => $row[ 'product' ][ 'id' ],
            )),
        ];
    }

    return new JsonResponse(
            [
                'draw' => $draw,
                'data' => $results,
                'recordsTotal' => $orders[ 'total_items' ],
                'recordsFiltered' => $orders[ 'total_items' ],
    ]);
}

GenerateUrl调用:

$this->container->get('router')->generate($route, $parameters, $referenceType)

订单数组转换为结果数组并生成网址。这非常像演示文稿,因此应该移出控制器。

获取模板引擎(Twig)来生成输出是最好的吗?或者为Json创建一个服务?

最佳做法是什么?

1 个答案:

答案 0 :(得分:0)

从技术上讲,您可以构建.json.twig布局,但在Twig扩展中转换“generateUrl”方法。

但是这需要你在布局中手动构建你的JSON,这绝对不是建议的。

创建JSONResponse对我来说似乎是一个很好的解决方案。