我嘗試使用Symfony和FOSRestBundle(1.3版)以html
和json
格式(我也希望最終允許使用xml
)同時提供內容。我已經成功地服務於使用_format
參數路線不同的內容,例如:如何使用Symfony 2和FOSRestBundle從同一路線提供HTML和JSON請求,以及_format?
/foo.json
將導致一個JSON響應,- 和
/foo
將導致HTML的響應。
有沒有辦法調和(在同一主機上!),使用比_format
其他東西,例如Content-Type
或Accept
頭相同內容的談判?
我看過Format Listener,但我認爲我對如何配置它有一個基本的誤解。
鑑於定義路線:
<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
我需要指定t如果我想以非默認格式(html
)的格式協商內容,請參閱請求中的_format
參數,如上所述。
但是,如果我指定的格式監聽下列規則:
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
。
任何幫助將不勝感激!
謝謝,我通過Body Listener(實際上是整個頁面)多次閱讀,但無論出於何種原因,當我第一次閱讀它從未點擊過的那部分內容類型時, –
鏈接已死亡... – Trix