Symfony2 FOSRestBundle只是json

时间:2015-04-07 13:25:51

标签: json symfony fosrestbundle

我开始使用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响应。如果可以的话,这可能是什么配置?

2 个答案:

答案 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);