From cbddb170f90da72a23e7ef695ab6afc29ad73d51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rokas=20Mikalk=C4=97nas?= Date: Mon, 30 Sep 2024 13:00:01 +0300 Subject: [PATCH] fix: parameter provider in a long running http worker --- src/State/Provider/ParameterProvider.php | 4 ++++ src/State/Tests/ParameterProviderTest.php | 4 +++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/State/Provider/ParameterProvider.php b/src/State/Provider/ParameterProvider.php index 9a905d9497..6022d76b95 100644 --- a/src/State/Provider/ParameterProvider.php +++ b/src/State/Provider/ParameterProvider.php @@ -52,6 +52,10 @@ public function provide(Operation $operation, array $uriVariables = [], array $c $context = ['operation' => $operation] + $context; $parameters = $operation->getParameters(); foreach ($parameters ?? [] as $parameter) { + $extraProperties = $parameter->getExtraProperties(); + unset($extraProperties['_api_values']); + $parameter = $parameter->withExtraProperties($extraProperties); + $values = $this->getParameterValues($parameter, $request, $context); $value = $this->extractParameterValues($parameter, $values); diff --git a/src/State/Tests/ParameterProviderTest.php b/src/State/Tests/ParameterProviderTest.php index 66d5d7a88f..57cf643cd4 100644 --- a/src/State/Tests/ParameterProviderTest.php +++ b/src/State/Tests/ParameterProviderTest.php @@ -51,9 +51,10 @@ public function has(string $id): bool 'order' => new QueryParameter(key: 'order', provider: 'test'), 'search[:property]' => new QueryParameter(key: 'search[:property]', provider: [self::class, 'provide']), 'foo' => new QueryParameter(key: 'foo', provider: [self::class, 'shouldNotBeCalled']), + 'baz' => (new QueryParameter(key: 'baz'))->withExtraProperties(['_api_values' => 'test1']), ])); $parameterProvider = new ParameterProvider(null, $locator); - $request = new Request(server: ['QUERY_STRING' => 'order[foo]=asc&search[a]=bar']); + $request = new Request(server: ['QUERY_STRING' => 'order[foo]=asc&search[a]=bar&baz=t42']); $context = ['request' => $request, 'operation' => $operation]; $parameterProvider->provide($operation, [], $context); $operation = $request->attributes->get('_api_operation'); @@ -61,6 +62,7 @@ public function has(string $id): bool $this->assertEquals('ok', $operation->getName()); $this->assertEquals(['foo' => 'asc'], $operation->getParameters()->get('order', QueryParameter::class)->getValue()); $this->assertEquals(['a' => 'bar'], $operation->getParameters()->get('search[:property]', QueryParameter::class)->getValue()); + $this->assertEquals('t42', $operation->getParameters()->get('baz', QueryParameter::class)->getValue()); } public static function provide(): void