Skip to content

Commit c689332

Browse files
committed
Remove DenormalizedIdentifiersAwareItemDataProviderInterface
1 parent aecde90 commit c689332

7 files changed

+17
-107
lines changed

src/Bridge/Doctrine/MongoDbOdm/ItemDataProvider.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
use ApiPlatform\Core\Bridge\Doctrine\Common\Util\IdentifierManagerTrait;
1717
use ApiPlatform\Core\Bridge\Doctrine\MongoDbOdm\Extension\AggregationItemExtensionInterface;
1818
use ApiPlatform\Core\Bridge\Doctrine\MongoDbOdm\Extension\AggregationResultItemExtensionInterface;
19-
use ApiPlatform\Core\DataProvider\DenormalizedIdentifiersAwareItemDataProviderInterface;
19+
use ApiPlatform\Core\DataProvider\ItemDataProviderInterface;
2020
use ApiPlatform\Core\DataProvider\RestrictedDataProviderInterface;
2121
use ApiPlatform\Core\Exception\RuntimeException;
2222
use ApiPlatform\Core\Metadata\Property\Factory\PropertyMetadataFactoryInterface;
@@ -33,7 +33,7 @@
3333
*
3434
* @author Alan Poulain <[email protected]>
3535
*/
36-
final class ItemDataProvider implements DenormalizedIdentifiersAwareItemDataProviderInterface, RestrictedDataProviderInterface
36+
final class ItemDataProvider implements ItemDataProviderInterface, RestrictedDataProviderInterface
3737
{
3838
use IdentifierManagerTrait;
3939

src/Bridge/Doctrine/Orm/ItemDataProvider.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
use ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\QueryItemExtensionInterface;
1717
use ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\QueryResultItemExtensionInterface;
1818
use ApiPlatform\Core\Bridge\Doctrine\Orm\Util\QueryNameGenerator;
19-
use ApiPlatform\Core\DataProvider\DenormalizedIdentifiersAwareItemDataProviderInterface;
19+
use ApiPlatform\Core\DataProvider\ItemDataProviderInterface;
2020
use ApiPlatform\Core\DataProvider\RestrictedDataProviderInterface;
2121
use ApiPlatform\Core\Exception\RuntimeException;
2222
use Doctrine\Common\Persistence\ManagerRegistry;
@@ -31,7 +31,7 @@
3131
* @author Samuel ROZE <[email protected]>
3232
* @final
3333
*/
34-
class ItemDataProvider implements DenormalizedIdentifiersAwareItemDataProviderInterface, RestrictedDataProviderInterface
34+
class ItemDataProvider implements ItemDataProviderInterface, RestrictedDataProviderInterface
3535
{
3636
private $managerRegistry;
3737
private $itemExtensions;
@@ -57,7 +57,7 @@ public function supports(string $resourceClass, string $operationName = null, ar
5757
*
5858
* @throws RuntimeException
5959
*/
60-
public function getItem(string $resourceClass, $identifiers, string $operationName = null, array $context = [])
60+
public function getItem(string $resourceClass, array $identifiers, string $operationName = null, array $context = [])
6161
{
6262
/** @var EntityManagerInterface $manager */
6363
$manager = $this->managerRegistry->getManagerForClass($resourceClass);

src/Bridge/Symfony/Bundle/ApiPlatformBundle.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
use ApiPlatform\Core\Bridge\Symfony\Bundle\DependencyInjection\Compiler\GraphQlMutationResolverPass;
2121
use ApiPlatform\Core\Bridge\Symfony\Bundle\DependencyInjection\Compiler\GraphQlQueryResolverPass;
2222
use ApiPlatform\Core\Bridge\Symfony\Bundle\DependencyInjection\Compiler\GraphQlTypePass;
23-
use ApiPlatform\Core\Bridge\Symfony\Bundle\DependencyInjection\Compiler\IdentifiedByResourceMetadataFactoryPass;
2423
use ApiPlatform\Core\Bridge\Symfony\Bundle\DependencyInjection\Compiler\MetadataAwareNameConverterPass;
2524
use Symfony\Component\DependencyInjection\Compiler\PassConfig;
2625
use Symfony\Component\DependencyInjection\Compiler\ResolveInstanceofConditionalsPass;

src/DataProvider/ChainItemDataProvider.php

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public function __construct(iterable $dataProviders)
4040
/**
4141
* {@inheritdoc}
4242
*/
43-
public function getItem(string $resourceClass, $id, string $operationName = null, array $context = [])
43+
public function getItem(string $resourceClass, array $identifiers, string $operationName = null, array $context = [])
4444
{
4545
foreach ($this->dataProviders as $dataProvider) {
4646
try {
@@ -49,17 +49,7 @@ public function getItem(string $resourceClass, $id, string $operationName = null
4949
continue;
5050
}
5151

52-
$identifier = $id;
53-
if (!$dataProvider instanceof DenormalizedIdentifiersAwareItemDataProviderInterface && $identifier && \is_array($identifier)) {
54-
if (\count($identifier) > 1) {
55-
@trigger_error(sprintf('Receiving "$id" as non-array in an item data provider is deprecated in 2.3 in favor of implementing "%s".', DenormalizedIdentifiersAwareItemDataProviderInterface::class), E_USER_DEPRECATED);
56-
$identifier = http_build_query($identifier, '', ';');
57-
} else {
58-
$identifier = current($identifier);
59-
}
60-
}
61-
62-
return $dataProvider->getItem($resourceClass, $identifier, $operationName, $context);
52+
return $dataProvider->getItem($resourceClass, $identifiers, $operationName, $context);
6353
} catch (ResourceClassNotSupportedException $e) {
6454
@trigger_error(sprintf('Throwing a "%s" is deprecated in favor of implementing "%s"', \get_class($e), RestrictedDataProviderInterface::class), E_USER_DEPRECATED);
6555
continue;

src/DataProvider/DenormalizedIdentifiersAwareItemDataProviderInterface.php

Lines changed: 0 additions & 27 deletions
This file was deleted.

src/DataProvider/ItemDataProviderInterface.php

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,9 @@ interface ItemDataProviderInterface
2525
/**
2626
* Retrieves an item.
2727
*
28-
* @param array|int|string $id
29-
*
3028
* @throws ResourceClassNotSupportedException
3129
*
3230
* @return object|null
3331
*/
34-
public function getItem(string $resourceClass, $id, string $operationName = null, array $context = []);
32+
public function getItem(string $resourceClass, array $identifiers, string $operationName = null, array $context = []);
3533
}

tests/DataProvider/ChainItemDataProviderTest.php

Lines changed: 9 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,9 @@
1414
namespace ApiPlatform\Core\Tests\DataProvider;
1515

1616
use ApiPlatform\Core\DataProvider\ChainItemDataProvider;
17-
use ApiPlatform\Core\DataProvider\DenormalizedIdentifiersAwareItemDataProviderInterface;
1817
use ApiPlatform\Core\DataProvider\ItemDataProviderInterface;
1918
use ApiPlatform\Core\DataProvider\RestrictedDataProviderInterface;
2019
use ApiPlatform\Core\Exception\ResourceClassNotSupportedException;
21-
use ApiPlatform\Core\Tests\Fixtures\TestBundle\Entity\CompositePrimitiveItem;
2220
use ApiPlatform\Core\Tests\Fixtures\TestBundle\Entity\Dummy;
2321
use ApiPlatform\Core\Tests\ProphecyTrait;
2422
use PHPUnit\Framework\TestCase;
@@ -37,47 +35,19 @@ public function testGetItem()
3735
$dummy = new Dummy();
3836
$dummy->setName('Lucie');
3937

40-
$firstDataProvider = $this->prophesize(DenormalizedIdentifiersAwareItemDataProviderInterface::class);
41-
$firstDataProvider->willImplement(RestrictedDataProviderInterface::class);
42-
$firstDataProvider->supports(Dummy::class, null, [])->willReturn(false);
43-
44-
$secondDataProvider = $this->prophesize(DenormalizedIdentifiersAwareItemDataProviderInterface::class);
45-
$secondDataProvider->willImplement(RestrictedDataProviderInterface::class);
46-
$secondDataProvider->supports(Dummy::class, null, [])->willReturn(true);
47-
$secondDataProvider->getItem(Dummy::class, ['id' => 1], null, [])->willReturn($dummy);
48-
49-
$thirdDataProvider = $this->prophesize(DenormalizedIdentifiersAwareItemDataProviderInterface::class);
50-
$thirdDataProvider->willImplement(RestrictedDataProviderInterface::class);
51-
$thirdDataProvider->supports(Dummy::class, null, [])->willReturn(true);
52-
$thirdDataProvider->getItem(Dummy::class, ['id' => 1], null, [])->willReturn(new \stdClass());
53-
54-
$chainItemDataProvider = new ChainItemDataProvider([
55-
$firstDataProvider->reveal(),
56-
$secondDataProvider->reveal(),
57-
$thirdDataProvider->reveal(),
58-
]);
59-
60-
$this->assertEquals($dummy, $chainItemDataProvider->getItem(Dummy::class, ['id' => 1]));
61-
}
62-
63-
public function testGetItemWithoutDenormalizedIdentifiers()
64-
{
65-
$dummy = new Dummy();
66-
$dummy->setName('Lucie');
67-
6838
$firstDataProvider = $this->prophesize(ItemDataProviderInterface::class);
6939
$firstDataProvider->willImplement(RestrictedDataProviderInterface::class);
7040
$firstDataProvider->supports(Dummy::class, null, [])->willReturn(false);
7141

7242
$secondDataProvider = $this->prophesize(ItemDataProviderInterface::class);
7343
$secondDataProvider->willImplement(RestrictedDataProviderInterface::class);
7444
$secondDataProvider->supports(Dummy::class, null, [])->willReturn(true);
75-
$secondDataProvider->getItem(Dummy::class, '1', null, [])->willReturn($dummy);
45+
$secondDataProvider->getItem(Dummy::class, ['id' => 1], null, [])->willReturn($dummy);
7646

7747
$thirdDataProvider = $this->prophesize(ItemDataProviderInterface::class);
7848
$thirdDataProvider->willImplement(RestrictedDataProviderInterface::class);
7949
$thirdDataProvider->supports(Dummy::class, null, [])->willReturn(true);
80-
$thirdDataProvider->getItem(Dummy::class, 1, null, [])->willReturn(new \stdClass());
50+
$thirdDataProvider->getItem(Dummy::class, ['id' => 1], null, [])->willReturn(new \stdClass());
8151

8252
$chainItemDataProvider = new ChainItemDataProvider([
8353
$firstDataProvider->reveal(),
@@ -96,7 +66,7 @@ public function testGetItemExceptions()
9666

9767
$chainItemDataProvider = new ChainItemDataProvider([$firstDataProvider->reveal()]);
9868

99-
$this->assertEquals('', $chainItemDataProvider->getItem('notfound', 1));
69+
$this->assertEquals('', $chainItemDataProvider->getItem('notfound', ['id' => 1]));
10070
}
10171

10272
/**
@@ -109,37 +79,17 @@ public function testLegacyGetItem()
10979
$dummy->setName('Lucie');
11080

11181
$firstDataProvider = $this->prophesize(ItemDataProviderInterface::class);
112-
$firstDataProvider->getItem(Dummy::class, 1, null, [])->willThrow(ResourceClassNotSupportedException::class);
82+
$firstDataProvider->getItem(Dummy::class, ['test' => 1], null, [])->willThrow(ResourceClassNotSupportedException::class);
11383

11484
$secondDataProvider = $this->prophesize(ItemDataProviderInterface::class);
115-
$secondDataProvider->getItem(Dummy::class, 1, null, [])->willReturn($dummy);
85+
$secondDataProvider->getItem(Dummy::class, ['test' => 1], null, [])->willReturn($dummy);
11686

11787
$thirdDataProvider = $this->prophesize(ItemDataProviderInterface::class);
118-
$thirdDataProvider->getItem(Dummy::class, 1, null, [])->willReturn(new \stdClass());
88+
$thirdDataProvider->getItem(Dummy::class, ['test' => 1], null, [])->willReturn(new \stdClass());
11989

12090
$chainItemDataProvider = new ChainItemDataProvider([$firstDataProvider->reveal(), $secondDataProvider->reveal(), $thirdDataProvider->reveal()]);
12191

122-
$chainItemDataProvider->getItem(Dummy::class, 1);
123-
}
124-
125-
/**
126-
* @group legacy
127-
* @expectedDeprecation Receiving "$id" as non-array in an item data provider is deprecated in 2.3 in favor of implementing "ApiPlatform\Core\DataProvider\DenormalizedIdentifiersAwareItemDataProviderInterface".
128-
*/
129-
public function testLegacyGetItemWithoutDenormalizedIdentifiersAndCompositeIdentifier()
130-
{
131-
$dummy = new CompositePrimitiveItem('Lucie', 1984);
132-
133-
$dataProvider = $this->prophesize(ItemDataProviderInterface::class);
134-
$dataProvider->willImplement(RestrictedDataProviderInterface::class);
135-
$dataProvider->supports(CompositePrimitiveItem::class, null, [])->willReturn(true);
136-
$dataProvider->getItem(CompositePrimitiveItem::class, 'name=Lucie;year=1984', null, [])->willReturn($dummy);
137-
138-
$chainItemDataProvider = new ChainItemDataProvider([
139-
$dataProvider->reveal(),
140-
]);
141-
142-
$this->assertEquals($dummy, $chainItemDataProvider->getItem(CompositePrimitiveItem::class, ['name' => 'Lucie', 'year' => 1984]));
92+
$chainItemDataProvider->getItem(Dummy::class, ['test' => 1]);
14393
}
14494

14595
/**
@@ -149,10 +99,10 @@ public function testLegacyGetItemWithoutDenormalizedIdentifiersAndCompositeIdent
14999
public function testLegacyGetItemExceptions()
150100
{
151101
$firstDataProvider = $this->prophesize(ItemDataProviderInterface::class);
152-
$firstDataProvider->getItem('notfound', 1, null, [])->willThrow(ResourceClassNotSupportedException::class);
102+
$firstDataProvider->getItem('notfound', ['test' => 1], null, [])->willThrow(ResourceClassNotSupportedException::class);
153103

154104
$chainItemDataProvider = new ChainItemDataProvider([$firstDataProvider->reveal()]);
155105

156-
$this->assertEquals('', $chainItemDataProvider->getItem('notfound', 1));
106+
$this->assertEquals('', $chainItemDataProvider->getItem('notfound', ['test' => 1]));
157107
}
158108
}

0 commit comments

Comments
 (0)