diff --git a/src/EventListener/SerializeListener.php b/src/EventListener/SerializeListener.php index 11555300412..d5cd4b7f8cd 100644 --- a/src/EventListener/SerializeListener.php +++ b/src/EventListener/SerializeListener.php @@ -59,13 +59,17 @@ public function onKernelView(GetResponseForControllerResultEvent $event) } $context = $this->serializerContextBuilder->createFromRequest($request, true, $attributes); - $resources = []; + $resources = new class() extends \ArrayObject { + public function serialize() + { + } + }; $context['resources'] = &$resources; $event->setControllerResult($this->serializer->serialize($controllerResult, $request->getRequestFormat(), $context)); $request->attributes->set('_api_respond', true); - $request->attributes->set('_resources', $request->attributes->get('_resources', []) + $resources); + $request->attributes->set('_resources', $request->attributes->get('_resources', []) + (array) $resources); } /** diff --git a/tests/EventListener/SerializeListenerTest.php b/tests/EventListener/SerializeListenerTest.php index 3535b066b75..947161cf207 100644 --- a/tests/EventListener/SerializeListenerTest.php +++ b/tests/EventListener/SerializeListenerTest.php @@ -102,9 +102,13 @@ public function testDoNotSerializeWhenOperationNotSet() public function testSerializeCollectionOperation() { - $expectedContext = ['request_uri' => '', 'resource_class' => 'Foo', 'collection_operation_name' => 'get', 'resources' => []]; + $expectedContext = ['request_uri' => '', 'resource_class' => 'Foo', 'collection_operation_name' => 'get']; $serializerProphecy = $this->prophesize(SerializerInterface::class); - $serializerProphecy->serialize(Argument::any(), 'xml', $expectedContext)->willReturn('bar')->shouldBeCalled(); + $serializerProphecy->serialize(Argument::any(), 'xml', Argument::that(function ($context) use ($expectedContext) { + unset($context['resources']); + + return $context === $expectedContext; + }))->willReturn('bar')->shouldBeCalled(); $request = new Request([], [], ['_api_resource_class' => 'Foo', '_api_collection_operation_name' => 'get']); $request->setRequestFormat('xml'); @@ -123,9 +127,13 @@ public function testSerializeCollectionOperation() public function testSerializeItemOperation() { - $expectedContext = ['request_uri' => '', 'resource_class' => 'Foo', 'item_operation_name' => 'get', 'resources' => []]; + $expectedContext = ['request_uri' => '', 'resource_class' => 'Foo', 'item_operation_name' => 'get']; $serializerProphecy = $this->prophesize(SerializerInterface::class); - $serializerProphecy->serialize(Argument::any(), 'xml', $expectedContext)->willReturn('bar')->shouldBeCalled(); + $serializerProphecy->serialize(Argument::any(), 'xml', Argument::that(function ($context) use ($expectedContext) { + unset($context['resources']); + + return $context === $expectedContext; + }))->willReturn('bar')->shouldBeCalled(); $request = new Request([], [], ['_api_resource_class' => 'Foo', '_api_item_operation_name' => 'get']); $request->setRequestFormat('xml');