php – 如何使用Symfony 2和FOSRestBundle从同一路径提供HTML和J
发布时间:2020-12-13 22:53:06 所属栏目:PHP教程 来源:网络整理
导读:我试图使用 Symfony和 FOSRestBundle(版本1.3)以html和json格式提供内容(我也想最终允许xml).我已成功使用_format参数为路由提供不同的内容,例如: /foo.json将导致JSON响应, 和/ foo将导致HTML响应. 是否有任何方法可以使用_format以外的其他内容协调(在同
我试图使用
Symfony和
FOSRestBundle(版本1.3)以html和json格式提供内容(我也想最终允许xml).我已成功使用_format参数为路由提供不同的内容,例如:
> /foo.json将导致JSON响应, 是否有任何方法可以使用_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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |