Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. ReplaceAliasByActualDefinitionPass.php

function ReplaceAliasByActualDefinitionPass::process

Process the Container to replace aliases with service definitions.

Throws

InvalidArgumentException if the service definition does not exist

Overrides AbstractRecursivePass::process

File

vendor/symfony/dependency-injection/Compiler/ReplaceAliasByActualDefinitionPass.php, line 36

Class

ReplaceAliasByActualDefinitionPass
Replaces aliases with actual service definitions, effectively removing these aliases.

Namespace

Symfony\Component\DependencyInjection\Compiler

Code

public function process(ContainerBuilder $container) : void {
    // First collect all alias targets that need to be replaced
    $seenAliasTargets = [];
    $replacements = [];
    foreach ($container->getAliases() as $definitionId => $target) {
        $targetId = (string) $target;
        // Special case: leave this target alone
        if ('service_container' === $targetId) {
            continue;
        }
        // Check if target needs to be replaced
        if (isset($replacements[$targetId])) {
            $container->setAlias($definitionId, $replacements[$targetId])
                ->setPublic($target->isPublic());
            if ($target->isDeprecated()) {
                $container->getAlias($definitionId)
                    ->setDeprecated(...array_values($target->getDeprecation('%alias_id%')));
            }
        }
        // No need to process the same target twice
        if (isset($seenAliasTargets[$targetId])) {
            continue;
        }
        // Process new target
        $seenAliasTargets[$targetId] = true;
        try {
            $definition = $container->getDefinition($targetId);
        } catch (ServiceNotFoundException $e) {
            if ('' !== $e->getId() && '@' === $e->getId()[0]) {
                throw new ServiceNotFoundException($e->getId(), $e->getSourceId(), null, [
                    substr($e->getId(), 1),
                ]);
            }
            throw $e;
        }
        if ($definition->isPublic()) {
            continue;
        }
        // Remove private definition and schedule for replacement
        $definition->setPublic($target->isPublic());
        $container->setDefinition($definitionId, $definition);
        $container->removeDefinition($targetId);
        $replacements[$targetId] = $definitionId;
        if ($target->isPublic() && $target->isDeprecated()) {
            $definition->addTag('container.private', $target->getDeprecation('%service_id%'));
        }
    }
    $this->replacements = $replacements;
    parent::process($container);
    $this->replacements = [];
}
RSS feed
Powered by Drupal