Skip to content

Commit 47598cc

Browse files
Fix 1151 - Improve autowiring
1 parent 3e9432d commit 47598cc

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed

src/Bridge/Symfony/Bundle/DependencyInjection/ApiPlatformExtension.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@
1313

1414
namespace ApiPlatform\Core\Bridge\Symfony\Bundle\DependencyInjection;
1515

16+
use ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\QueryCollectionExtensionInterface;
17+
use ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\QueryItemExtensionInterface;
18+
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\FilterInterface;
19+
use ApiPlatform\Core\DataProvider\CollectionDataProviderInterface;
20+
use ApiPlatform\Core\DataProvider\ItemDataProviderInterface;
1621
use Doctrine\Common\Annotations\Annotation;
1722
use Doctrine\ORM\Version;
1823
use phpDocumentor\Reflection\DocBlockFactoryInterface;
@@ -80,6 +85,17 @@ public function load(array $configs, ContainerBuilder $container)
8085
$loader->load('data_provider.xml');
8186
$loader->load('filter.xml');
8287

88+
$container->registerForAutoconfiguration(ItemDataProviderInterface::class)
89+
->addTag('api_platform.item_data_provider');
90+
$container->registerForAutoconfiguration(CollectionDataProviderInterface::class)
91+
->addTag('api_platform.collection_data_provider');
92+
$container->registerForAutoconfiguration(FilterInterface::class)
93+
->addTag('api_platform.filter');
94+
$container->registerForAutoconfiguration(QueryItemExtensionInterface::class)
95+
->addTag('api_platform.doctrine.orm.query_extension.item');
96+
$container->registerForAutoconfiguration(QueryCollectionExtensionInterface::class)
97+
->addTag('api_platform.doctrine.orm.query_extension.collection');
98+
8399
if (interface_exists(ValidatorInterface::class)) {
84100
$loader->load('validator.xml');
85101
}

tests/Bridge/Symfony/Bundle/DependencyInjection/ApiPlatformExtensionTest.php

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,20 @@
1313

1414
namespace ApiPlatform\Core\Tests\Bridge\Symfony\Bundle\DependencyInjection;
1515

16+
use ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\QueryCollectionExtensionInterface;
17+
use ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\QueryItemExtensionInterface;
18+
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\FilterInterface;
1619
use ApiPlatform\Core\Bridge\Symfony\Bundle\DependencyInjection\ApiPlatformExtension;
20+
use ApiPlatform\Core\DataProvider\CollectionDataProviderInterface;
21+
use ApiPlatform\Core\DataProvider\ItemDataProviderInterface;
1722
use ApiPlatform\Core\Exception\InvalidArgumentException;
1823
use Doctrine\Bundle\DoctrineBundle\DoctrineBundle;
1924
use FOS\UserBundle\FOSUserBundle;
2025
use Nelmio\ApiDocBundle\NelmioApiDocBundle;
2126
use Prophecy\Argument;
2227
use Symfony\Bundle\SecurityBundle\SecurityBundle;
2328
use Symfony\Component\Config\FileLocator;
29+
use Symfony\Component\DependencyInjection\ChildDefinition;
2430
use Symfony\Component\DependencyInjection\ContainerBuilder;
2531
use Symfony\Component\DependencyInjection\Definition;
2632
use Symfony\Component\DependencyInjection\DefinitionDecorator;
@@ -223,6 +229,28 @@ private function getContainerBuilderProphecy()
223229
});
224230

225231
$containerBuilderProphecy = $this->prophesize(ContainerBuilder::class);
232+
$childDefinitionProphecy = $this->prophesize(ChildDefinition::class);
233+
234+
$containerBuilderProphecy->registerForAutoconfiguration(ItemDataProviderInterface::class)
235+
->willReturn($childDefinitionProphecy)->shouldBeCalledTimes(1);
236+
$childDefinitionProphecy->addTag('api_platform.item_data_provider')->shouldBeCalledTimes(1);
237+
238+
$containerBuilderProphecy->registerForAutoconfiguration(CollectionDataProviderInterface::class)
239+
->willReturn($childDefinitionProphecy)->shouldBeCalledTimes(1);
240+
$childDefinitionProphecy->addTag('api_platform.collection_data_provider')->shouldBeCalledTimes(1);
241+
242+
$containerBuilderProphecy->registerForAutoconfiguration(FilterInterface::class)
243+
->willReturn($childDefinitionProphecy)->shouldBeCalledTimes(1);
244+
$childDefinitionProphecy->addTag('api_platform.filter')->shouldBeCalledTimes(1);
245+
246+
$containerBuilderProphecy->registerForAutoconfiguration(QueryItemExtensionInterface::class)
247+
->willReturn($childDefinitionProphecy)->shouldBeCalledTimes(1);
248+
$childDefinitionProphecy->addTag('api_platform.doctrine.orm.query_extension.item')->shouldBeCalledTimes(1);
249+
250+
$containerBuilderProphecy->registerForAutoconfiguration(QueryCollectionExtensionInterface::class)
251+
->willReturn($childDefinitionProphecy)->shouldBeCalledTimes(1);
252+
$childDefinitionProphecy->addTag('api_platform.doctrine.orm.query_extension.collection')->shouldBeCalledTimes(1);
253+
226254
$containerBuilderProphecy->getParameter('kernel.bundles')->willReturn([
227255
'DoctrineBundle' => DoctrineBundle::class,
228256
])->shouldBeCalled();

0 commit comments

Comments
 (0)