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

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.     /** @var TargetEntitiesResolverInterface */
  24.     private $targetEntitiesResolver;
  25.     public function __construct(TargetEntitiesResolverInterface $targetEntitiesResolver)
  26.     {
  27.         $this->targetEntitiesResolver $targetEntitiesResolver;
  28.     }
  29.     public function process(ContainerBuilder $container): void
  30.     {
  31.         try {
  32.             /** @var array $resources */
  33.             $resources $container->getParameter('sylius.resources');
  34.             $resolveTargetEntityListener $container->findDefinition('doctrine.orm.listeners.resolve_target_entity');
  35.         } catch (InvalidArgumentException $exception) {
  36.             return;
  37.         }
  38.         $interfaces $this->targetEntitiesResolver->resolve($resources);
  39.         foreach ($interfaces as $interface => $model) {
  40.             $resolveTargetEntityListener->addMethodCall('addResolveTargetEntity', [$interface$model, []]);
  41.         }
  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. }