diff --git a/src/Bridge/Doctrine/Orm/Extension/FilterEagerLoadingExtension.php b/src/Bridge/Doctrine/Orm/Extension/FilterEagerLoadingExtension.php
index 97eb130a382..b1f6ecd0b49 100644
--- a/src/Bridge/Doctrine/Orm/Extension/FilterEagerLoadingExtension.php
+++ b/src/Bridge/Doctrine/Orm/Extension/FilterEagerLoadingExtension.php
@@ -160,7 +160,7 @@ private function hasFetchEagerAssociation(EntityManager $em, ClassMetadataInfo $
$related = $em->getClassMetadata($mapping['targetEntity']);
- if (in_array($related->name, $checked)) {
+ if (in_array($related->name, $checked, true)) {
continue;
}
diff --git a/src/Bridge/Symfony/Bundle/DependencyInjection/ApiPlatformExtension.php b/src/Bridge/Symfony/Bundle/DependencyInjection/ApiPlatformExtension.php
index 4d9ab000c8f..b246dfd7522 100644
--- a/src/Bridge/Symfony/Bundle/DependencyInjection/ApiPlatformExtension.php
+++ b/src/Bridge/Symfony/Bundle/DependencyInjection/ApiPlatformExtension.php
@@ -258,7 +258,7 @@ private function registerCacheConfiguration(ContainerBuilder $container)
*/
private function registerLoaders(ContainerBuilder $container, array $bundles)
{
- $annotationPaths = [];
+ $resourceClassDirectories = [];
$yamlResources = [];
$xmlResources = [];
@@ -267,12 +267,13 @@ private function registerLoaders(ContainerBuilder $container, array $bundles)
$this->addFileResources($bundleDirectory, $xmlResources, $yamlResources);
if (file_exists($entityDirectory = $bundleDirectory.'/Entity')) {
- $annotationPaths[] = $entityDirectory;
+ $resourceClassDirectories[] = $entityDirectory;
$container->addResource(new DirectoryResource($entityDirectory, '/\.php$/'));
}
}
- $container->getDefinition('api_platform.metadata.resource.name_collection_factory.annotation')->addArgument($annotationPaths);
+ $container->setParameter('api_platform.resource_class_directories', $resourceClassDirectories);
+ $container->getDefinition('api_platform.metadata.resource.name_collection_factory.annotation')->addArgument('%api_platform.resource_class_directories%');
$container->getDefinition('api_platform.metadata.extractor.yaml')->addArgument($yamlResources);
$container->getDefinition('api_platform.metadata.extractor.xml')->addArgument($xmlResources);
}
diff --git a/src/Bridge/Symfony/Bundle/Resources/config/api.xml b/src/Bridge/Symfony/Bundle/Resources/config/api.xml
index 27337a1fa19..b0ebd87f737 100644
--- a/src/Bridge/Symfony/Bundle/Resources/config/api.xml
+++ b/src/Bridge/Symfony/Bundle/Resources/config/api.xml
@@ -35,6 +35,7 @@
%api_platform.formats%
+ %api_platform.resource_class_directories%
diff --git a/src/Bridge/Symfony/Routing/ApiLoader.php b/src/Bridge/Symfony/Routing/ApiLoader.php
index 1a13c76688d..24cb18cc4ea 100644
--- a/src/Bridge/Symfony/Routing/ApiLoader.php
+++ b/src/Bridge/Symfony/Routing/ApiLoader.php
@@ -21,6 +21,7 @@
use Doctrine\Common\Inflector\Inflector;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\Config\Loader\Loader;
+use Symfony\Component\Config\Resource\DirectoryResource;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpKernel\KernelInterface;
use Symfony\Component\Routing\Loader\XmlFileLoader;
@@ -43,8 +44,9 @@ final class ApiLoader extends Loader
private $operationPathResolver;
private $container;
private $formats;
+ private $resourceClassDirectories;
- public function __construct(KernelInterface $kernel, ResourceNameCollectionFactoryInterface $resourceNameCollectionFactory, ResourceMetadataFactoryInterface $resourceMetadataFactory, OperationPathResolverInterface $operationPathResolver, ContainerInterface $container, array $formats)
+ public function __construct(KernelInterface $kernel, ResourceNameCollectionFactoryInterface $resourceNameCollectionFactory, ResourceMetadataFactoryInterface $resourceMetadataFactory, OperationPathResolverInterface $operationPathResolver, ContainerInterface $container, array $formats, array $resourceClassDirectories = [])
{
$this->fileLoader = new XmlFileLoader(new FileLocator($kernel->locateResource('@ApiPlatformBundle/Resources/config/routing')));
$this->resourceNameCollectionFactory = $resourceNameCollectionFactory;
@@ -52,14 +54,18 @@ public function __construct(KernelInterface $kernel, ResourceNameCollectionFacto
$this->operationPathResolver = $operationPathResolver;
$this->container = $container;
$this->formats = $formats;
+ $this->resourceClassDirectories = $resourceClassDirectories;
}
/**
* {@inheritdoc}
*/
- public function load($data, $type = null)
+ public function load($data, $type = null): RouteCollection
{
$routeCollection = new RouteCollection();
+ foreach ($this->resourceClassDirectories as $directory) {
+ $routeCollection->addResource(new DirectoryResource($directory, '/\.php$/'));
+ }
$this->loadExternalFiles($routeCollection);
diff --git a/tests/Bridge/Symfony/Bundle/DependencyInjection/ApiPlatformExtensionTest.php b/tests/Bridge/Symfony/Bundle/DependencyInjection/ApiPlatformExtensionTest.php
index 87b094f454d..24da5be5ebe 100644
--- a/tests/Bridge/Symfony/Bundle/DependencyInjection/ApiPlatformExtensionTest.php
+++ b/tests/Bridge/Symfony/Bundle/DependencyInjection/ApiPlatformExtensionTest.php
@@ -210,6 +210,7 @@ private function getContainerBuilderProphecy()
'api_platform.eager_loading.enabled' => Argument::type('bool'),
'api_platform.eager_loading.max_joins' => 30,
'api_platform.eager_loading.force_eager' => true,
+ 'api_platform.resource_class_directories' => [],
];
foreach ($parameters as $key => $value) {
$containerBuilderProphecy->setParameter($key, $value)->shouldBeCalled();
@@ -219,7 +220,7 @@ private function getContainerBuilderProphecy()
$containerBuilderProphecy->hasExtension('http://symfony.com/schema/dic/services')->shouldBeCalled();
$definitionProphecy = $this->prophesize(Definition::class);
- $definitionProphecy->addArgument([])->shouldBeCalled();
+ $definitionProphecy->addArgument('%api_platform.resource_class_directories%')->shouldBeCalled();
$containerBuilderProphecy->getDefinition('api_platform.metadata.resource.name_collection_factory.annotation')->willReturn($definitionProphecy->reveal())->shouldBeCalled();
foreach (['yaml', 'xml'] as $format) {