Symfony2& FOS_RestBundle:尽管请求的内容类型,我如何使主体监听器始终解码json内容?

时间:2012-11-19 21:54:32

标签: php symfony fosrestbundle

我正在构建一个Web服务,我打算只提供一个json接口。

为此,我希望用户能够尽可能轻松地与我的API进行交互。在理想的世界中,消费者使用“application / json”的Content-Type标头发送请求,但是我希望我的API接受json编码的请求,而不管Content-Type标头。

我正在使用Symfony2和FOS_RESTBundle并设置了一个正文监听器和格式监听器以及一条到我的控制器的路由,该路由应该强制格式为应用程序json。

如果我发送内容类型为'application / json'的请求,则正确解码正文。 在下面的示例中,任何其他Content-Type标头结果都是$ data的空值。 $ type总是json(由于路由中的_format)。

我哪里错了?

// config.yaml 
fos_rest:
view:
    view_response_listener: false
    failed_validation: HTTP_BAD_REQUEST
    default_engine: php
    formats:
        text: false
        xml: false
        html: false
        json: true
format_listener:
    default_priorities: ['application/json']
    fallback_format: json
    prefer_extension: true
body_listener:
    decoders:
        json: fos_rest.decoder.json

和 -

// Routing.yaml

_api_contact_request_create:
  pattern: /api/merchant/{merchantId}/customer-contact-request
  defaults: { _controller: AcmeApiBundle:CustomerContact:Create, _format: json}
  type: rest
  requirements: 
     _method: POST

最后 -

    // Extract from Controller
    public function CreateAction($merchantId) {

        $data = $this->getRequest()->request->get('data');

        $type = $this->getRequest()->getRequestFormat();

        var_dump($type, $data);die;

0 个答案:

没有答案