我的目标是在用户代理设置为除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?
答案 0 :(得分:2)
请注意,如果在路由中匹配_format,则会添加一个虚拟Accept标头设置,其q设置低于最低Accept标头,这意味着将检查格式是否在最后的优先级中匹配。如果prefer_extension设置为true,则虚拟Accept标头将高于最高q,导致首先检查扩展。将优先级设置为非空数组会启用Accept header negotiation。
另外,我注意到在rules
部分,您错过了path
选项。因此应用程序不知道应用规则的路径。
看看我上面链接的文档,它有一个例子。