4

假设我有一个 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;
    }

    ...
}
?>

谢谢!

4

0 回答 0