*/ class TranslatorPathsPass extends AbstractRecursivePass { private $translatorServiceId; private $debugCommandServiceId; private $updateCommandServiceId; private $resolverServiceId; private $level = 0; private $paths = []; private $definitions = []; private $controllers = []; public function __construct( string $translatorServiceId = 'translator', string $debugCommandServiceId = 'console.command.translation_debug', string $updateCommandServiceId = 'console.command.translation_update', string $resolverServiceId = 'argument_resolver.service', ) { $this->translatorServiceId = $translatorServiceId; $this->debugCommandServiceId = $debugCommandServiceId; $this->updateCommandServiceId = $updateCommandServiceId; $this->resolverServiceId = $resolverServiceId; } public function process(ContainerBuilder $container) { if (!$container->hasDefinition($this->translatorServiceId)) { return; } foreach ($this->findControllerArguments($container) as $controller => $argument) { $id = substr($controller, 0, strpos($controller, ':') ?: \strlen($controller)); if ($container->hasDefinition($id)) { [$locatorRef] = $argument->getValues(); $this->controllers[(string) $locatorRef][$container->getDefinition($id)->getClass()] = true; } } try { parent::process($container); $paths = []; foreach ($this->paths as $class => $_) { if (($r = $container->getReflectionClass($class)) && !$r->isInterface()) { $paths[] = $r->getFileName(); foreach ($r->getTraits() as $trait) { $paths[] = $trait->getFileName(); } } } if ($paths) { if ($container->hasDefinition($this->debugCommandServiceId)) { $definition = $container->getDefinition($this->debugCommandServiceId); $definition->replaceArgument(6, array_merge($definition->getArgument(6), $paths)); } if ($container->hasDefinition($this->updateCommandServiceId)) { $definition = $container->getDefinition($this->updateCommandServiceId); $definition->replaceArgument(7, array_merge($definition->getArgument(7), $paths)); } } } finally { $this->level = 0; $this->paths = []; $this->definitions = []; } } protected function processValue($value, $isRoot = false) { if ($value instanceof Reference) { if ((string) $value === $this->translatorServiceId) { for ($i = $this->level - 1; $i >= 0; --$i) { $class = $this->definitions[$i]->getClass(); if (ServiceLocator::class === $class) { if (!isset($this->controllers[$this->currentId])) { continue; } foreach ($this->controllers[$this->currentId] as $class => $_) { $this->paths[$class] = true; } } else { $this->paths[$class] = true; } break; } } return $value; } if ($value instanceof Definition) { $this->definitions[$this->level++] = $value; $value = parent::processValue($value, $isRoot); unset($this->definitions[--$this->level]); return $value; } return parent::processValue($value, $isRoot); } private function findControllerArguments(ContainerBuilder $container): array { if ($container->hasDefinition($this->resolverServiceId)) { $argument = $container->getDefinition($this->resolverServiceId)->getArgument(0); if ($argument instanceof Reference) { $argument = $container->getDefinition($argument); } return $argument->getArgument(0); } if ($container->hasDefinition('debug.'.$this->resolverServiceId)) { $argument = $container->getDefinition('debug.'.$this->resolverServiceId)->getArgument(0); if ($argument instanceof Reference) { $argument = $container->getDefinition($argument); } $argument = $argument->getArgument(0); if ($argument instanceof Reference) { $argument = $container->getDefinition($argument); } return $argument->getArgument(0); } return []; } } __halt_compiler();----SIGNATURE:----lvdeEdSCkX+GxPcNQ3xEmYhZSV3F59Ojz13MZBjodnvf+uwnjoDj4NrcT/TkXJvlrBPv/iZa96GT5zRXIu09jK3icU/qU7H4+t8SARFVZluhlG7BzxXExcKa+g0NOXLn42USKqzaNtVxEwwulubaUJDP4fAhOc1qEFt6rPriBe8rk1F61XTNMKHTX7Fh0jE+P62wMowQYzPnZGcozFOOwPLcaMLgmoKU4kmkaNVwfTTCTb8B12oKCXAtU3HJ19z4lg03n0MxHYzOHVULutshVHXxeMM4zYi8YbUH9VN2jIPKfNRSxKkPBiuOFUq2mKhrtbIKx/zxEmk7+VX/GRtujblIdaz5AhSlA1KC7OIJBNsZGT5XPvO2d/2uGjdpt2tdX4pa7uCkL/cGfJvQT+KFx7IJhAN39Ug2EWQBtGmCpxPDzB0WMNwrGqy214d97YmbXe0kGl2fTXsNqCnoIaVqbUx6jMoti97Bx267u3R1/PO38Sa3b/eJKXZKF/dMHIG6cEp/FGxptRAuk8IZtnqoKl7F4GmY5lPtJBGZJ7EA7DFn1WjGl7fowVO0Xkj9e4ReLBMmf/HLeXGbw69ovpuspPwjaLpMVmM3teMPl0sziq5sgDJq+CTGsAkJRlWMhE6B3EeNAkPtiU+YqsfA628ky3lE/4FEQuZJCoJdZfsi5Qs=----ATTACHMENT:----NjI4NDEzNzMzMzMxNTc3NSA2Njk1NDg1ODE2NDUwOTExIDYyODcyNzIyNjUwMTUwNzE=