vendor/sylius/resource-bundle/src/Bundle/DependencyInjection/Compiler/DoctrineTargetEntitiesResolverPass.php line 45

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the Sylius package.
  4.  *
  5.  * (c) Paweł Jędrzejewski
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. declare(strict_types=1);
  11. namespace Sylius\Bundle\ResourceBundle\DependencyInjection\Compiler;
  12. use Doctrine\Common\EventSubscriber;
  13. use Sylius\Bundle\ResourceBundle\DependencyInjection\Compiler\Helper\TargetEntitiesResolverInterface;
  14. use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
  15. use Symfony\Component\DependencyInjection\ContainerBuilder;
  16. use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
  17. /**
  18.  * Resolves given target entities with container parameters.
  19.  * Usable only with *doctrine/orm* driver.
  20.  */
  21. final class DoctrineTargetEntitiesResolverPass implements CompilerPassInterface
  22. {
  23.     private TargetEntitiesResolverInterface $targetEntitiesResolver;
  24.     public function __construct(TargetEntitiesResolverInterface $targetEntitiesResolver)
  25.     {
  26.         $this->targetEntitiesResolver $targetEntitiesResolver;
  27.     }
  28.     public function process(ContainerBuilder $container): void
  29.     {
  30.         try {
  31.             /** @var array $resources */
  32.             $resources $container->getParameter('sylius.resources');
  33.             $resolveTargetEntityListener $container->findDefinition('doctrine.orm.listeners.resolve_target_entity');
  34.         } catch (InvalidArgumentException $exception) {
  35.             return;
  36.         }
  37.         $interfaces $this->targetEntitiesResolver->resolve($resources);
  38.         foreach ($interfaces as $interface => $model) {
  39.             $resolveTargetEntityListener->addMethodCall('addResolveTargetEntity', [$interface$model, []]);
  40.         }
  41.         /** @var object|string $resolveTargetEntityListenerClass */
  42.         $resolveTargetEntityListenerClass $container->getParameterBag()->resolveValue($resolveTargetEntityListener->getClass());
  43.         if (is_a($resolveTargetEntityListenerClassEventSubscriber::class, true)) {
  44.             if (!$resolveTargetEntityListener->hasTag('doctrine.event_subscriber')) {
  45.                 $resolveTargetEntityListener->addTag('doctrine.event_subscriber');
  46.             }
  47.         } elseif (!$resolveTargetEntityListener->hasTag('doctrine.event_listener')) {
  48.             $resolveTargetEntityListener->addTag('doctrine.event_listener', ['event' => 'loadClassMetadata']);
  49.         }
  50.     }
  51. }