Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony2&;FOS_RestBundle:如何使主体侦听器始终解码json内容,而不管请求的内容类型如何?_Php_Symfony_Fosrestbundle - Fatal编程技术网

Php Symfony2&;FOS_RestBundle:如何使主体侦听器始终解码json内容,而不管请求的内容类型如何?

Php Symfony2&;FOS_RestBundle:如何使主体侦听器始终解码json内容,而不管请求的内容类型如何?,php,symfony,fosrestbundle,Php,Symfony,Fosrestbundle,我正在构建一个Web服务,我只打算提供一个json接口 为此,我想让用户尽可能容易地与我的API交互。在理想情况下,消费者发送的请求的内容类型标头为“application/json”,但我希望我的API接受json编码的请求,而不考虑内容类型标头 我正在使用Symfony2和FOS_RESTBundle,并设置了一个body侦听器和format侦听器,以及一个到我的控制器的路由,该路由应该强制将格式设置为应用程序json 如果我发送了一个内容类型为“application/json”的请求,则

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

为此,我想让用户尽可能容易地与我的API交互。在理想情况下,消费者发送的请求的内容类型标头为“application/json”,但我希望我的API接受json编码的请求,而不考虑内容类型标头

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

如果我发送了一个内容类型为“application/json”的请求,则正文被正确解码。 在下面的示例中,任何其他内容类型标题结果都是$data的空值$类型始终为json(由于路由中的_格式)

我哪里做错了

// 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;

您可以在
kernel.request
上创建一个侦听器,并添加自己的内容类型:application/json。。。只有当您检测到一个json body时,我想Adrien是对的,BodyListener将内容类型置于请求格式之上,因此您需要伪造一个头,或者编写自己的DecoderProviderInterface,对->supports($which)说是,并覆盖默认值。