| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 | <?php/* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */namespace Symfony\Component\HttpKernel\DependencyInjection;use Symfony\Component\DependencyInjection\Argument\IteratorArgument;use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;use Symfony\Component\DependencyInjection\Compiler\PriorityTaggedServiceTrait;use Symfony\Component\DependencyInjection\ContainerBuilder;use Symfony\Component\DependencyInjection\Reference;use Symfony\Component\HttpKernel\Controller\ArgumentResolver\TraceableValueResolver;use Symfony\Component\Stopwatch\Stopwatch;/** * Gathers and configures the argument value resolvers. * * @author Iltar van der Berg <kjarli@gmail.com> */class ControllerArgumentValueResolverPass implements CompilerPassInterface{    use PriorityTaggedServiceTrait;    private $argumentResolverService;    private $argumentValueResolverTag;    private $traceableResolverStopwatch;    public function __construct(string $argumentResolverService = 'argument_resolver', string $argumentValueResolverTag = 'controller.argument_value_resolver', string $traceableResolverStopwatch = 'debug.stopwatch')    {        if (0 < \func_num_args()) {            trigger_deprecation('symfony/http-kernel', '5.3', 'Configuring "%s" is deprecated.', __CLASS__);        }        $this->argumentResolverService = $argumentResolverService;        $this->argumentValueResolverTag = $argumentValueResolverTag;        $this->traceableResolverStopwatch = $traceableResolverStopwatch;    }    public function process(ContainerBuilder $container)    {        if (!$container->hasDefinition($this->argumentResolverService)) {            return;        }        $resolvers = $this->findAndSortTaggedServices($this->argumentValueResolverTag, $container);        if ($container->getParameter('kernel.debug') && class_exists(Stopwatch::class) && $container->has($this->traceableResolverStopwatch)) {            foreach ($resolvers as $resolverReference) {                $id = (string) $resolverReference;                $container->register("debug.$id", TraceableValueResolver::class)                    ->setDecoratedService($id)                    ->setArguments([new Reference("debug.$id.inner"), new Reference($this->traceableResolverStopwatch)]);            }        }        $container            ->getDefinition($this->argumentResolverService)            ->replaceArgument(1, new IteratorArgument($resolvers))        ;    }}
 |