Php 我如何使用Symfony 2和FOSRestBundle,除了使用_格式之外,还使用头文件,为来自同一路由的HTML和JSON请求提供服务?

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

我正在尝试使用和(1.3版)以
html
json
格式提供内容(我还希望最终允许
xml
)。我已经成功地使用
\u format
参数为路线提供了不同的内容,例如:

  • /foo.json
    将导致json响应
  • /foo
    将导致HTML响应
有没有办法(在同一主机上!)使用除
\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 }