SymfonyとFOSRestBundle (ver. 1.3)を使用して、 と の両方html
の形式でコンテンツを提供しようとしていjson
ます (最終的にxml
は同様に許可したいと考えています)。パラメータを使用してルートのさまざまなコンテンツを提供することに成功しました。_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
_format
上記のように、ネゴシエートされたコンテンツをデフォルト ( ) 以外の形式で必要とする場合は、要求でパラメーターを指定する必要がありますhtml
。
ただし、フォーマット リスナーに次のルールを指定すると、次のようになります。
fos_rest:
format_listener:
rules:
- { path: '^/', priorities: ['json'], fallback_format: ~, prefer_extension: false }
- { path: '^/', priorities: ['html', '*/*'], fallback_format: html, prefer_extension: true }
ブラウザのリクエストはレスポンスを as として返しますContent-Type: application/json
が、実際のコンテンツはtext/html
シリアル化された JSON ではなくコンテンツです。Accept
リクエストでヘッダーを明示的に指定すると、Accept: text/html
受け取った応答のコンテンツ タイプ ヘッダーはContent-Type: text/html
.
どんな助けでも大歓迎です!