Php 我如何使用Symfony 2和FOSRestBundle,除了使用_格式之外,还使用头文件,为来自同一路由的HTML和JSON请求提供服务?
我正在尝试使用和(1.3版)以Php 我如何使用Symfony 2和FOSRestBundle,除了使用_格式之外,还使用头文件,为来自同一路由的HTML和JSON请求提供服务?,php,symfony,fosrestbundle,content-negotiation,Php,Symfony,Fosrestbundle,Content Negotiation,我正在尝试使用和(1.3版)以html和json格式提供内容(我还希望最终允许xml)。我已经成功地使用\u format参数为路线提供了不同的内容,例如: /foo.json将导致json响应 而/foo将导致HTML响应 有没有办法(在同一主机上!)使用除\u格式以外的其他格式(例如内容类型或接受标题)协调上述相同内容协商 我已经看过了,但是我认为我对如何配置它有一个基本的误解 给定定义的路线: <route id="foo" pattern="/foo.{_format}" m
html
和json
格式提供内容(我还希望最终允许xml
)。我已经成功地使用\u format
参数为路线提供了不同的内容,例如:
将导致json响应/foo.json
- 而
将导致HTML响应/foo
\u格式
以外的其他格式(例如内容类型
或接受
标题)协调上述相同内容协商
我已经看过了,但是我认为我对如何配置它有一个基本的误解
给定定义的路线:
<route id="foo" pattern="/foo.{_format}" methods="GET">
<default key="_controller">FooBundle:Foo:get</default>
<default key="_format">html</default>
</route>
。。。以及以下FOSRestBundle配置(代码段):
如果我希望协商内容的格式不是默认格式(html
),我需要在请求中指定\u format
参数,如上所述
但是,如果我为格式侦听器指定以下规则:
fos_rest:
format_listener:
rules:
- { path: '^/', priorities: ['json'], fallback_format: ~, prefer_extension: false }
- { path: '^/', priorities: ['html', '*/*'], fallback_format: html, prefer_extension: true }
浏览器请求将我的响应返回为内容类型:application/json
,但实际内容是文本/html
内容,而不是序列化的json。如果我在请求中将Accept
标题明确指定为Accept:text/html
,则我收到的响应的内容类型标题为content-type:text/html
任何帮助都将不胜感激 如果希望基于内容类型头进行内容协商,则需要BodyListener而不是FormatListener。
阅读。谢谢,我多次阅读了Body Listener(事实上是整个页面),但无论出于什么原因,当我第一次阅读该部分时,它从未点击过针对Body内容类型的内容。
fos_rest:
...
format_listener: true
fos_rest:
format_listener:
rules:
- { path: '^/', priorities: ['json'], fallback_format: ~, prefer_extension: false }
- { path: '^/', priorities: ['html', '*/*'], fallback_format: html, prefer_extension: true }