Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json Symfony2 FOSRestBundle_Json_Symfony_Fosrestbundle - Fatal编程技术网

Json Symfony2 FOSRestBundle

Json Symfony2 FOSRestBundle,json,symfony,fosrestbundle,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()

我开始使用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响应,那该多好啊。如果可能的话,这个设置的配置是什么样子的

当view\u response\u listener设置为true而不是force和 @如果未使用视图,则渲染将委托给 SensioFrameworkExtraBundle

您需要在SensioFrameworkExtraBundle中将注释设置为false:

sensio_framework_extra:
view:    { annotations: false }


您可以看看这个示例

是的,可以使用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 }
注意:在上面的代码视图中,响应侦听器设置为“force”

在控制器中,您可以通过创建$view对象以JSON响应的形式发送数据,如下所示

$view = View::create();

$view->setFormat('json');

$view->setStatusCode(200)->setData($data); 

return $this->get('fos_rest.view_handler')->handle($view);

我按照你的建议做了,但它仍然给出了错误:找不到模板这不起作用,但无论如何,为什么我需要添加模板格式的选项:html:true,如果我只想提供json?你能详细说明一下这不起作用吗?你犯了什么错误?声明这不起作用无助于我们进行调试。当然,如果您不打算使用“模板格式”选项,您可以省去它。很抱歉,声明不完整。出现“找不到模板”错误。问题是accept标头。您必须发送application/json;charset=UTF-8或application/json作为请求中的Accept头,或者需要启用preference\u扩展,然后只需将.json添加到路由模式中即可。检查讨论:您所说的似乎是正确的,如果我在routes to json中设置了default _format参数,我就不会再出现这个错误,但是我尝试设置Accept header,但又出现了同样的错误。我更喜欢使用标题,而不是额外的格式参数,但可能有更多的配置,因为当前的配置不适用于标题
$view = View::create();

$view->setFormat('json');

$view->setStatusCode(200)->setData($data); 

return $this->get('fos_rest.view_handler')->handle($view);