php – 如何使用Symfony 2和FOSRestBundle从同一路径提供HTML和JSON请求,除了_format之外还使用标头?

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 如何使用Symfony 2和FOSRestBundle从同一路径提供HTML和JSON请求,除了_format之外还使用标头?脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图使用 SymfonyFOSRestBundle(版本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

如果我想要以认(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.

任何帮助将不胜感激!

解决方法

如果您希望基于Content-type标头进行内容协商,则需要使用BodyListener而不是FormatListener.
阅读 documentation.

脚本宝典总结

以上是脚本宝典为你收集整理的php – 如何使用Symfony 2和FOSRestBundle从同一路径提供HTML和JSON请求,除了_format之外还使用标头?全部内容,希望文章能够帮你解决php – 如何使用Symfony 2和FOSRestBundle从同一路径提供HTML和JSON请求,除了_format之外还使用标头?所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。