Php Symfony2&;FOS_RestBundle:如何使主体侦听器始终解码json内容,而不管请求的内容类型如何?
我正在构建一个Web服务,我只打算提供一个json接口 为此,我想让用户尽可能容易地与我的API交互。在理想情况下,消费者发送的请求的内容类型标头为“application/json”,但我希望我的API接受json编码的请求,而不考虑内容类型标头 我正在使用Symfony2和FOS_RESTBundle,并设置了一个body侦听器和format侦听器,以及一个到我的控制器的路由,该路由应该强制将格式设置为应用程序json 如果我发送了一个内容类型为“application/json”的请求,则正文被正确解码。 在下面的示例中,任何其他内容类型标题结果都是$data的空值$类型始终为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”的请求,则
// 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)说是,并覆盖默认值。