假设我有一个 REST API 调用:
/api/message/list
我想根据 HTTP Accept Header 有不同的响应格式。
当我从 curl 命令请求 JSON 或 XML 时,它可以完美运行。但是当我从浏览器加载它时,它会尝试渲染树枝模板,我不希望这样。我希望它返回 XML 内容而不是 HTML。使用这种方法,我不需要为浏览器输出创建一个 twig 文件。
我想这样做是因为在浏览器上拥有 API 输出而不需要为其创建树枝是很实用的。
我在配置文件中遗漏了什么吗?或者,默认情况下当前不支持此功能?
我尝试使用它但不起作用。
fos_rest:
body_listener:
decoders:
html: fos_rest.decoder.xml
...
我在 config.yml 上的完整 FOSRest 配置:
fos_rest:
param_fetcher_listener: true
body_listener:
decoders:
json: fos_rest.decoder.json
xml: fos_rest.decoder.xml
html: fos_rest.decoder.xml
format_listener:
default_priorities: [html, xml, json]
fallback_format: xml
view:
view_response_listener: force
formats:
json: true
xml: true
force_redirects:
html: true
failed_validation: HTTP_BAD_REQUEST
default_engine: php
sensio_framework_extra:
view: { annotations: false }
router: { annotations: true }
我对控制器的列表操作仅返回消息数组:
<?php
use FOS\RestBundle\Controller\Annotations as Rest;
class MessageController extends Controller {
/**
* @Rest\View()
*/
public function listAction() {
$messages = //get the messages
return $messages;
}
...
}
?>
谢谢!