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

Breadcrumb

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

function ControllerArgumentValueResolverPass::process

Overrides CompilerPassInterface::process

File

vendor/symfony/http-kernel/DependencyInjection/ControllerArgumentValueResolverPass.php, line 33

Class

ControllerArgumentValueResolverPass
Gathers and configures the argument value resolvers.

Namespace

Symfony\Component\HttpKernel\DependencyInjection

Code

public function process(ContainerBuilder $container) : void {
    if (!$container->hasDefinition('argument_resolver')) {
        return;
    }
    $definitions = $container->getDefinitions();
    $namedResolvers = $this->findAndSortTaggedServices(new TaggedIteratorArgument('controller.targeted_value_resolver', 'name', needsIndexes: true), $container);
    $resolvers = $this->findAndSortTaggedServices(new TaggedIteratorArgument('controller.argument_value_resolver', 'name', needsIndexes: true), $container);
    foreach ($resolvers as $name => $resolver) {
        if ($definitions[(string) $resolver]->hasTag('controller.targeted_value_resolver')) {
            unset($resolvers[$name]);
        }
        else {
            $namedResolvers[$name] ??= clone $resolver;
        }
    }
    if ($container->getParameter('kernel.debug') && class_exists(Stopwatch::class) && $container->has('debug.stopwatch')) {
        foreach ($resolvers as $name => $resolver) {
            $resolvers[$name] = new Reference('.debug.value_resolver.' . $resolver);
            $container->register('.debug.value_resolver.' . $resolver, TraceableValueResolver::class)
                ->setArguments([
                $resolver,
                new Reference('debug.stopwatch'),
            ]);
        }
        foreach ($namedResolvers as $name => $resolver) {
            $namedResolvers[$name] = new Reference('.debug.value_resolver.' . $resolver);
            $container->register('.debug.value_resolver.' . $resolver, TraceableValueResolver::class)
                ->setArguments([
                $resolver,
                new Reference('debug.stopwatch'),
            ]);
        }
    }
    $container->getDefinition('argument_resolver')
        ->replaceArgument(1, new IteratorArgument(array_values($resolvers)))
        ->setArgument(2, new ServiceLocatorArgument($namedResolvers));
}
RSS feed
Powered by Drupal