Skip to content

Commit 7cb5a6d

Browse files
deguifsoyuka
andauthored
fix: allow parameter provider as object (#7032)
* fix: allow parameter provider as object * remove useless phpdoc --------- Co-authored-by: soyuka <soyuka@users.noreply.github.com>
1 parent 7c52f34 commit 7cb5a6d

File tree

3 files changed

+14
-6
lines changed

3 files changed

+14
-6
lines changed

src/State/Provider/ParameterProvider.php

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
use ApiPlatform\Metadata\Operation;
1717
use ApiPlatform\State\Exception\ProviderNotFoundException;
1818
use ApiPlatform\State\ParameterNotFound;
19-
use ApiPlatform\State\ParameterProviderInterface;
2019
use ApiPlatform\State\ProviderInterface;
2120
use ApiPlatform\State\Util\ParameterParserTrait;
2221
use ApiPlatform\State\Util\RequestParser;
@@ -83,13 +82,15 @@ public function provide(Operation $operation, array $uriVariables = [], array $c
8382
continue;
8483
}
8584

86-
if (!\is_string($provider) || !$this->locator->has($provider)) {
87-
throw new ProviderNotFoundException(\sprintf('Provider "%s" not found on operation "%s"', $provider, $operation->getName()));
85+
if (\is_string($provider)) {
86+
if (!$this->locator->has($provider)) {
87+
throw new ProviderNotFoundException(\sprintf('Provider "%s" not found on operation "%s"', $provider, $operation->getName()));
88+
}
89+
90+
$provider = $this->locator->get($provider);
8891
}
8992

90-
/** @var ParameterProviderInterface $providerInstance */
91-
$providerInstance = $this->locator->get($provider);
92-
if (($op = $providerInstance->provide($parameter, $values, $context)) instanceof Operation) {
93+
if (($op = $provider->provide($parameter, $values, $context)) instanceof Operation) {
9394
$operation = $op;
9495
}
9596
}

tests/Fixtures/TestBundle/ApiResource/WithParameter.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
'group' => new QueryParameter(provider: [self::class, 'provideGroup']),
4040
'properties' => new QueryParameter(filter: 'my_dummy.property'),
4141
'service' => new QueryParameter(provider: CustomGroupParameterProvider::class),
42+
'object' => new QueryParameter(provider: new CustomGroupParameterProvider()),
4243
'auth' => new HeaderParameter(provider: [self::class, 'restrictAccess']),
4344
'priority' => new QueryParameter(provider: [self::class, 'assertSecond'], priority: 10),
4445
'priorityb' => new QueryParameter(provider: [self::class, 'assertFirst'], priority: 20),

tests/Functional/Parameters/ParameterTest.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,12 @@ public function testWithServiceProvider(): void
4343
$this->assertArrayNotHasKey('a', $response->toArray());
4444
}
4545

46+
public function testWithObjectProvider(): void
47+
{
48+
$response = self::createClient()->request('GET', 'with_parameters/1?service=blabla');
49+
$this->assertArrayNotHasKey('a', $response->toArray());
50+
}
51+
4652
public function testWithHeader(): void
4753
{
4854
self::createClient()->request('GET', 'with_parameters/1?service=blabla', ['headers' => ['auth' => 'foo']]);

0 commit comments

Comments
 (0)