* * 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\Compiler\ServiceLocatorTagPass; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; use Symfony\Component\DependencyInjection\Reference; use Symfony\Component\HttpKernel\Fragment\FragmentRendererInterface; /** * Adds services tagged kernel.fragment_renderer as HTTP content rendering strategies. * * @author Fabien Potencier */ class FragmentRendererPass implements CompilerPassInterface { private $handlerService; private $rendererTag; /** * @param string $handlerService Service name of the fragment handler in the container * @param string $rendererTag Tag name used for fragments */ public function __construct($handlerService = 'fragment.handler', $rendererTag = 'kernel.fragment_renderer') { $this->handlerService = $handlerService; $this->rendererTag = $rendererTag; } public function process(ContainerBuilder $container) { if (!$container->hasDefinition($this->handlerService)) { return; } $definition = $container->getDefinition($this->handlerService); $renderers = array(); foreach ($container->findTaggedServiceIds($this->rendererTag, true) as $id => $tags) { $def = $container->getDefinition($id); $class = $container->getParameterBag()->resolveValue($def->getClass()); if (!$r = $container->getReflectionClass($class)) { throw new InvalidArgumentException(sprintf('Class "%s" used for service "%s" cannot be found.', $class, $id)); } if (!$r->isSubclassOf(FragmentRendererInterface::class)) { throw new InvalidArgumentException(sprintf('Service "%s" must implement interface "%s".', $id, FragmentRendererInterface::class)); } foreach ($tags as $tag) { $renderers[$tag['alias']] = new Reference($id); } } $definition->replaceArgument(0, ServiceLocatorTagPass::register($container, $renderers)); } } __halt_compiler();----SIGNATURE:----pCXFZ6h9yx58yEiVkPqrjuKkpFWtW0Xnl3hdG63mw3VwUpl1eWZKqFdRmeY2TZaMkmkpFQ/UxeEBhpwcA7fA+oYLFZoWADWnbLdWzE8AnZqyMUBaKHtIDZk6lBfuMcdWCcRO7xYEQdxMsb3mQKRxHPuf/348dhMk5ZsAYm9lYp2L0sjVZqtIByfcHpbD5nQX/lGf/UxYJzwZ8sdNjsfgn+7i7bWu70kGcG3PhW9KQlNf56BHeTnTk0pYmXLYm8RaWpZA1pMlGn72moCURqkCHdALXrjmb2mMxVri9d0XbYu2HME+74zTGWgqbb0MmTIcqvjlxpDZ3uq1V0h9WYQaCZ7V66kS3NzzQZi6zzZBKP3PH155Bvtzk9aeI8Oqe+kcWQXUUWDVBmfNSqn0IsX0XpVOudB8RWcFkFGzlf0W2egQF8SQ6ropp+GcE4eCKPpWf38rXQTZQabhS8NRlok8BBf02a9pvKye7AIgCj0Tc3K6R1t6KdOUDxQ7VnT3/9wWO8qfOVGgBDNZPl4GGRwkQ7Muiiwx9Kqa/a1ik7cAc9ZiJ+ZhzgX3L+dtGteGTMBzPhHvm6YTOo24PqYAFqj/dDXIBxzsibmE8r1PtQHfUpsPsvMb5Dr/74pK9AhNtIBwuN+QlDfSnRxLDa9+83eAlFz06Mt2BFRuF+/fLWkVtJY=----ATTACHMENT:----MTcyNDIyMjYyMjUxMjU1NyA0MTI3NzI4NTM4MjA5Njg3IDczMzQ4MzUzMjczODk2NzA=