From bd9c65da0135db5e7ce69b096305232280139773 Mon Sep 17 00:00:00 2001 From: soyuka Date: Tue, 2 Dec 2025 14:42:05 +0100 Subject: [PATCH] fix(symfony): skip argument resolver when context is not api platform fixes #7574 --- .../Bundle/ArgumentResolver/PayloadArgumentResolver.php | 6 +++++- .../Bundle/ArgumentResolver/PayloadArgumentResolverTest.php | 4 ++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Bundle/ArgumentResolver/PayloadArgumentResolver.php b/src/Symfony/Bundle/ArgumentResolver/PayloadArgumentResolver.php index ea359270c10..e935632b797 100644 --- a/src/Symfony/Bundle/ArgumentResolver/PayloadArgumentResolver.php +++ b/src/Symfony/Bundle/ArgumentResolver/PayloadArgumentResolver.php @@ -71,7 +71,11 @@ public function resolve(Request $request, ArgumentMetadata $argument): iterable private function getExpectedInputClass(Request $request): ?string { $operation = $this->initializeOperation($request); - if (Request::METHOD_DELETE === $request->getMethod() || $request->isMethodSafe() || !($operation?->canDeserialize() ?? true)) { + if (!$operation) { + return null; + } + + if (Request::METHOD_DELETE === $request->getMethod() || $request->isMethodSafe() || !($operation->canDeserialize() ?? true)) { return null; } diff --git a/tests/Symfony/Bundle/ArgumentResolver/PayloadArgumentResolverTest.php b/tests/Symfony/Bundle/ArgumentResolver/PayloadArgumentResolverTest.php index 786a9c584f8..a7d04983fd3 100644 --- a/tests/Symfony/Bundle/ArgumentResolver/PayloadArgumentResolverTest.php +++ b/tests/Symfony/Bundle/ArgumentResolver/PayloadArgumentResolverTest.php @@ -166,6 +166,10 @@ public static function provideUnsupportedRequests(): iterable yield 'request without attributes' => [self::createRequest('PUT', [])]; + yield 'request without API Platform operation attributes' => [self::createRequest('POST', [ + 'data' => new ResourceImplementation(), + ])]; + yield 'request on operation with deserialization disabled' => [self::createRequest('PUT', [ '_api_resource_class' => ResourceImplementation::class, '_api_operation_name' => 'update_no_deserialize',