FOSRestBundle:如何配置回退格式

时间:2013-12-17 19:44:46

标签: json symfony fosrestbundle

我的目标是在用户代理设置为除json或xml以外的任何其他内容时使用默认的json输出。我已按如下方式配置FOSRestBundle 1.1.0:

fos_rest:
format_listener: true
param_fetcher_listener: true
view:
    default_engine: php
    formats:
        json: true
        xml: true
    templating_formats:
        html: false
    view_response_listener: force
routing_loader:
    default_format: json

这很有效。现在我添加了以下配置:

format_listener:
    rules:
        - { fallback_format: json, prefer_extension: false, priorities: ['xml', 'json'] }

一旦我这样做,我就不能再通过附加?_format=json?_format=xml来切换格式,并且似乎忽略了Accept标头,它总是使用我在accept中指定的任何内容报头中。

如果浏览器接受的格式是HTML,如何配置FOSRestBundle以便它通过参数/ HTTP请求头接受json或XML并且会回退到json?

1 个答案:

答案 0 :(得分:2)

根据FOSRestBundle Docs

  

请注意,如果在路由中匹配_format,则会添加一个虚拟Accept标头设置,其q设置低于最低Accept标头,这意味着将检查格式是否在最后的优先级中匹配。如果prefer_extension设置为true,则虚拟Accept标头将高于最高q,导致首先检查扩展。将优先级设置为非空数组会启用Accept header negotiation。

另外,我注意到在rules部分,您错过了path选项。因此应用程序不知道应用规则的路径。

看看我上面链接的文档,它有一个例子。