Spaces:
No application file
No application file
namespace Mautic\CoreBundle\DependencyInjection\Compiler; | |
use Mautic\CoreBundle\Factory\ModelFactory; | |
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; | |
use Symfony\Component\DependencyInjection\Compiler\ServiceLocatorTagPass; | |
use Symfony\Component\DependencyInjection\ContainerBuilder; | |
use Symfony\Component\DependencyInjection\Reference; | |
class ModelPass implements CompilerPassInterface | |
{ | |
public const TAG = 'mautic.model'; | |
public function process(ContainerBuilder $container): void | |
{ | |
$modelServices = []; | |
foreach ($container->findTaggedServiceIds(self::TAG) as $id => $tags) { | |
$modelServices[$id] = new Reference($id); | |
// because aliases are not tagged we need to inject them too. | |
// @see https://github.com/symfony/symfony/issues/17256 | |
foreach ($container->getAliases() as $aliasId => $alias) { | |
$aliasedId = (string) $alias; | |
if ($aliasedId !== $id) { | |
continue; | |
} | |
$modelServices[$aliasId] = new Reference($aliasedId); | |
} | |
} | |
$myService = $container->findDefinition(ModelFactory::class); | |
$myService->addArgument(ServiceLocatorTagPass::register($container, $modelServices)); | |
} | |
} | |