Skip to content

Commit dd03d9d

Browse files
authored
Merge pull request #1786 from gorghoa/allow-empty-request-content-on-body-method
Allow a POST request to have an empty body
2 parents 9d9e8ec + 6d39e76 commit dd03d9d

File tree

2 files changed

+16
-4
lines changed

2 files changed

+16
-4
lines changed

src/EventListener/DeserializeListener.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,16 @@ public function __construct(SerializerInterface $serializer, SerializerContextBu
4747
public function onKernelRequest(GetResponseEvent $event)
4848
{
4949
$request = $event->getRequest();
50+
$method = $request->getMethod();
5051
if (
5152
$request->isMethodSafe(false)
52-
|| $request->isMethod('DELETE')
53+
|| 'DELETE' === $method
5354
|| !($attributes = RequestAttributesExtractor::extractAttributes($request))
5455
|| !$attributes['receive']
55-
|| ('' === ($requestContent = $request->getContent()) && $request->isMethod('PUT'))
56+
|| (
57+
'' === ($requestContent = $request->getContent())
58+
&& ('POST' === $method || 'PUT' === $method)
59+
)
5660
) {
5761
return;
5862
}

tests/EventListener/DeserializeListenerTest.php

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,15 @@ public function testDoNotCallWhenRequestMethodIsSafe()
4747
$listener->onKernelRequest($eventProphecy->reveal());
4848
}
4949

50-
public function testDoNotCallWhenPutAndEmptyRequestContent()
50+
/**
51+
* @dataProvider allowedEmptyRequestMethodsProvider
52+
*/
53+
public function testDoNotCallWhenSendingAndEmptyRequestContent($method)
5154
{
5255
$eventProphecy = $this->prophesize(GetResponseEvent::class);
5356

5457
$request = new Request([], [], ['data' => new \stdClass(), '_api_resource_class' => 'Foo', '_api_item_operation_name' => 'put'], [], [], [], '');
55-
$request->setMethod('PUT');
58+
$request->setMethod($method);
5659
$request->headers->set('Content-Type', 'application/json');
5760
$eventProphecy->getRequest()->willReturn($request)->shouldBeCalled();
5861

@@ -66,6 +69,11 @@ public function testDoNotCallWhenPutAndEmptyRequestContent()
6669
$listener->onKernelRequest($eventProphecy->reveal());
6770
}
6871

72+
public function allowedEmptyRequestMethodsProvider()
73+
{
74+
return [['PUT'], ['POST']];
75+
}
76+
6977
public function testDoNotCallWhenRequestNotManaged()
7078
{
7179
$eventProphecy = $this->prophesize(GetResponseEvent::class);

0 commit comments

Comments
 (0)