You are here

public function FragmentRendererPass::process in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 vendor/symfony/http-kernel/DependencyInjection/FragmentRendererPass.php \Symfony\Component\HttpKernel\DependencyInjection\FragmentRendererPass::process()

You can modify the container here before it is dumped to PHP code.

Parameters

ContainerBuilder $container:

Overrides CompilerPassInterface::process

File

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

Class

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

Namespace

Symfony\Component\HttpKernel\DependencyInjection

Code

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,
        ));
      }
    }
  }
}