从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创建一个服务?
最佳做法是什么?
答案 0 :(得分:0)
从技术上讲,您可以构建.json.twig布局,但在Twig扩展中转换“generateUrl”方法。
但是这需要你在布局中手动构建你的JSON,这绝对不是建议的。
创建JSONResponse对我来说似乎是一个很好的解决方案。