我正在尝试使用Symfonyhtml
和FOSRestBundle(1.3 版)以两种json
格式提供内容(我也希望最终也允许)。我已经成功地使用参数为路线提供不同的内容,例如:xml
_format
/foo.json
将导致 JSON 响应,- 并
/foo
会产生一个 HTML 响应。
有没有办法使用除 之外的东西来协调(在同一主机上!)上面的相同内容协商_format
,例如Content-Type
orAccept
标头?
我查看了格式侦听器,但我认为我对如何配置它有一个基本的误解。
给定定义的路线:
<route id="foo" pattern="/foo.{_format}" methods="GET">
<default key="_controller">FooBundle:Foo:get</default>
<default key="_format">html</default>
</route>
...对于以下操作:
public function getAction(Request $request)
{
$view = View::create()
->setData(array('greeting' => 'hello world'))
->setFormat($request->getRequestFormat('html'))
->setTemplate('FooBundle:Foo:get.html.twig');
return $this->get('fos_rest.view_handler')->handle($view);
}
...以及以下 FOSRestBundle 配置(片段):
fos_rest:
...
format_listener: true
_format
如果我想要以默认 ( ) 以外的格式协商内容,我需要在请求中指定参数html
,如上所述。
但是,如果我为格式侦听器指定以下规则:
fos_rest:
format_listener:
rules:
- { path: '^/', priorities: ['json'], fallback_format: ~, prefer_extension: false }
- { path: '^/', priorities: ['html', '*/*'], fallback_format: html, prefer_extension: true }
浏览器请求返回我的响应,Content-Type: application/json
但实际内容是text/html
内容而不是序列化的 JSON。Accept
如果我在请求中明确指定标头,因为Accept: text/html
我收到的响应的内容类型标头为Content-Type: text/html
.
任何帮助将不胜感激!