我开始使用FOSRestBundle构建restful api。我不想让代码尽可能简单明了。我将仅针对json响应使用api(无模板)。现在我看到" @ View"注释非常好,在使用它时,return语句变得像返回" $ data"一样简单。对象
//http://symfony.com/doc/current/bundles/FOSRestBundle/3-listener-support.html
/**
* @View()
*/
public function getUsersAction()
{
return $data;
}
但这需要我创建模板,而我并不需要也不需要这样做。
如果我只是简单地返回任何$ data(或至少是数组),它会自动格式化为json响应。如果可以的话,这可能是什么配置?
答案 0 :(得分:0)
“当view_response_listener设置为true而不是force和 未使用@View(),然后将委托渲染 SensioFrameworkExtraBundle“。
您需要在SensioFrameworkExtraBundle中将注释设置为false:
sensio_framework_extra:
view: { annotations: false }
和
fos_rest:
view:
view_response_listener: force
您可以查看此示例https://github.com/liip/LiipHelloBundle/blob/master/Controller/ExtraController.php
答案 1 :(得分:0)
是的,可以使用FOSRestBundle将响应作为JSON返回。为此,您可以设置如下配置选项:
fos_rest:
param_fetcher_listener: true
body_listener: true
format_listener: true
view:
view_response_listener: 'force'
formats:
xml: true
json: true
templating_formats:
html: true
format_listener:
rules:
- { path: ^/, priorities: [ json, xml, html ], fallback_format: ~, prefer_extension: true }
请注意,在上面的代码中,view_response_listener设置为'force'。
并且在您的控制器中,您可以通过创建$ view对象来发送数据作为JSON响应,如下所示
$view = View::create();
$view->setFormat('json');
$view->setStatusCode(200)->setData($data);
return $this->get('fos_rest.view_handler')->handle($view);