gpt4 book ai didi

php - 我如何使用 Symfony 2 和 FOSRestBundle,除了 _format 之外还使用 header ,从同一路由提供 HTML 和 JSON 请求?

转载 作者:可可西里 更新时间:2023-10-31 23:40:25 24 4
gpt4 key购买 nike

我正在尝试使用 Symfony 提供 htmljson 格式的内容(我也希望最终允许使用 xml)和 FOSRestBundle(版本 1.3)。我已经成功地使用 _format 参数为路由提供不同的内容,例如:

  • /foo.json 将产生一个 JSON 响应,
  • /foo 将生成 HTML 响应。

有什么方法可以使用 _format 以外的东西来协调(在同一台主机上!)上面相同的内容协商,例如 Content-Type接受 header ?

我看过 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

如果我想要协商的内容采用默认格式 (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 header 作为 Accept: text/html 我收到的响应具有 Content-Type: text 的内容类型 header /html.

如有任何帮助,我们将不胜感激!

最佳答案

如果您想要基于 Content-type header 的内容协商,您需要 BodyListener 而不是 FormatListener。阅读 documentation .

关于php - 我如何使用 Symfony 2 和 FOSRestBundle,除了 _format 之外还使用 header ,从同一路由提供 HTML 和 JSON 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24724787/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com