You are here

class FragmentRendererPass in Zircon Profile 8.0

Same name and namespace in other branches
  1. 8 vendor/symfony/http-kernel/DependencyInjection/FragmentRendererPass.php \Symfony\Component\HttpKernel\DependencyInjection\FragmentRendererPass

Adds services tagged kernel.fragment_renderer as HTTP content rendering strategies.

@author Fabien Potencier <fabien@symfony.com>

Hierarchy

Expanded class hierarchy of FragmentRendererPass

1 file declares its use of FragmentRendererPass
FragmentRendererPassTest.php in vendor/symfony/http-kernel/Tests/DependencyInjection/FragmentRendererPassTest.php

File

vendor/symfony/http-kernel/DependencyInjection/FragmentRendererPass.php, line 23

Namespace

Symfony\Component\HttpKernel\DependencyInjection
View source
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);
    foreach ($container
      ->findTaggedServiceIds($this->rendererTag) as $id => $tags) {
      $def = $container
        ->getDefinition($id);
      if (!$def
        ->isPublic()) {
        throw new \InvalidArgumentException(sprintf('The service "%s" must be public as fragment renderer are lazy-loaded.', $id));
      }
      if ($def
        ->isAbstract()) {
        throw new \InvalidArgumentException(sprintf('The service "%s" must not be abstract as fragment renderer are lazy-loaded.', $id));
      }
      $refClass = new \ReflectionClass($container
        ->getParameterBag()
        ->resolveValue($def
        ->getClass()));
      $interface = 'Symfony\\Component\\HttpKernel\\Fragment\\FragmentRendererInterface';
      if (!$refClass
        ->implementsInterface($interface)) {
        throw new \InvalidArgumentException(sprintf('Service "%s" must implement interface "%s".', $id, $interface));
      }
      foreach ($tags as $tag) {
        if (!isset($tag['alias'])) {
          @trigger_error(sprintf('Service "%s" will have to define the "alias" attribute on the "%s" tag as of Symfony 3.0.', $id, $this->rendererTag), E_USER_DEPRECATED);

          // register the handler as a non-lazy-loaded one
          $definition
            ->addMethodCall('addRenderer', array(
            new Reference($id),
          ));
        }
        else {
          $definition
            ->addMethodCall('addRendererService', array(
            $tag['alias'],
            $id,
          ));
        }
      }
    }
  }

}

Members

Namesort descending Modifiers Type Description Overrides
FragmentRendererPass::$handlerService private property
FragmentRendererPass::$rendererTag private property
FragmentRendererPass::process public function You can modify the container here before it is dumped to PHP code. Overrides CompilerPassInterface::process
FragmentRendererPass::__construct public function