diff --git a/src/Bundle/DependencyInjection/Compiler/RegisterAliasesForDoctrineRepositoriesPass.php b/src/Bundle/DependencyInjection/Compiler/RegisterAliasesForDoctrineRepositoriesPass.php new file mode 100644 index 000000000..963694f54 --- /dev/null +++ b/src/Bundle/DependencyInjection/Compiler/RegisterAliasesForDoctrineRepositoriesPass.php @@ -0,0 +1,57 @@ +hasParameter('sylius.resources')) { + return; + } + + /** @var array $resources */ + $resources = $container->getParameter('sylius.resources'); + + foreach ($resources as $resourceAlias => $configuration) { + $model = $configuration['classes']['model'] ?? null; + + if (null === $model) { + continue; + } + + $reflection = new \ReflectionClass($model); + $entityAttribute = $reflection->getAttributes(Entity::class)[0] ?? null; + $repositoryClass = $entityAttribute?->getArguments()['repositoryClass'] ?? null; + + if (null === $repositoryClass) { + continue; + } + + $metadata = Metadata::fromAliasAndConfiguration($resourceAlias, $configuration); + $repositoryAlias = $metadata->getServiceId('repository'); + + if (!$container->hasDefinition($repositoryClass)) { + continue; + } + + $container->setAlias($repositoryAlias, $repositoryClass); + } + } +} diff --git a/src/Bundle/DependencyInjection/Driver/Doctrine/DoctrineORMDriver.php b/src/Bundle/DependencyInjection/Driver/Doctrine/DoctrineORMDriver.php index c0393169b..f6d49d28b 100644 --- a/src/Bundle/DependencyInjection/Driver/Doctrine/DoctrineORMDriver.php +++ b/src/Bundle/DependencyInjection/Driver/Doctrine/DoctrineORMDriver.php @@ -64,9 +64,7 @@ protected function addRepository(ContainerBuilder $container, MetadataInterface /** @var string $entityClass */ $entityClass = $metadata->getClass('model'); - $definition->setFactory([$managerReference, 'getRepository']); - $definition->setArguments([$entityClass]); - + $definition->setArguments([$managerReference, $this->getClassMetadataDefinition($metadata)]); $container->setDefinition($serviceId, $definition); $genericEntities[] = $entityClass; diff --git a/src/Bundle/SyliusResourceBundle.php b/src/Bundle/SyliusResourceBundle.php index 257530f2a..744266854 100644 --- a/src/Bundle/SyliusResourceBundle.php +++ b/src/Bundle/SyliusResourceBundle.php @@ -18,6 +18,7 @@ use Sylius\Bundle\ResourceBundle\DependencyInjection\Compiler\DoctrineTargetEntitiesResolverPass; use Sylius\Bundle\ResourceBundle\DependencyInjection\Compiler\Helper\TargetEntitiesResolver; use Sylius\Bundle\ResourceBundle\DependencyInjection\Compiler\PagerfantaBridgePass; +use Sylius\Bundle\ResourceBundle\DependencyInjection\Compiler\RegisterAliasesForDoctrineRepositoriesPass; use Sylius\Bundle\ResourceBundle\DependencyInjection\Compiler\RegisterFormBuilderPass; use Sylius\Bundle\ResourceBundle\DependencyInjection\Compiler\RegisterFqcnControllersPass; use Sylius\Bundle\ResourceBundle\DependencyInjection\Compiler\RegisterResourceRepositoryPass; @@ -50,6 +51,7 @@ public function build(ContainerBuilder $container): void $container->addCompilerPass(new CsrfTokenManagerPass()); $container->addCompilerPass(new DisableMetadataCachePass()); + $container->addCompilerPass(new RegisterAliasesForDoctrineRepositoriesPass()); $container->addCompilerPass(new DoctrineContainerRepositoryFactoryPass()); $container->addCompilerPass(new DoctrineTargetEntitiesResolverPass(new TargetEntitiesResolver()), PassConfig::TYPE_BEFORE_OPTIMIZATION, 1); $container->addCompilerPass(new RegisterFormBuilderPass());