Spaces:
Sleeping
Sleeping
processmaker-community / processmaker-files /vendor /symfony /http-kernel /DependencyInjection /FragmentRendererPass.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\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 <fabien@symfony.com> | |
| */ | |
| 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)); | |
| } | |
| } | |