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

Breadcrumb

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

class ControllerArgumentValueResolverPass

Gathers and configures the argument value resolvers.

@author Iltar van der Berg <kjarli@gmail.com>

Hierarchy

  • class \Symfony\Component\HttpKernel\DependencyInjection\ControllerArgumentValueResolverPass implements \Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface uses \Symfony\Component\DependencyInjection\Compiler\PriorityTaggedServiceTrait

Expanded class hierarchy of ControllerArgumentValueResolverPass

File

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

Namespace

Symfony\Component\HttpKernel\DependencyInjection
View source
class ControllerArgumentValueResolverPass implements CompilerPassInterface {
    use PriorityTaggedServiceTrait;
    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));
    }

}

Members

Title Sort descending Modifiers Object type Summary Overriden Title
ControllerArgumentValueResolverPass::process public function You can modify the container here before it is dumped to PHP code. Overrides CompilerPassInterface::process
PriorityTaggedServiceTrait::findAndSortTaggedServices private function Finds all services with the given tag name and order them by their priority.
RSS feed
Powered by Drupal