Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\CachePoolPass::process PHP Method

process() public method

public process ( ContainerBuilder $container )
$container Symfony\Component\DependencyInjection\ContainerBuilder
    public function process(ContainerBuilder $container)
    {
        if ($container->hasParameter('cache.prefix.seed')) {
            $seed = '.' . $container->getParameterBag()->resolveValue($container->getParameter('cache.prefix.seed'));
        } else {
            $seed = '_' . $container->getParameter('kernel.root_dir');
        }
        $seed .= '.' . $container->getParameter('kernel.name') . '.' . $container->getParameter('kernel.environment');
        $aliases = $container->getAliases();
        $attributes = array('provider', 'namespace', 'default_lifetime');
        foreach ($container->findTaggedServiceIds('cache.pool') as $id => $tags) {
            $adapter = $pool = $container->getDefinition($id);
            if ($pool->isAbstract()) {
                continue;
            }
            $isLazy = $pool->isLazy();
            while ($adapter instanceof ChildDefinition) {
                $adapter = $container->findDefinition($adapter->getParent());
                $isLazy = $isLazy || $adapter->isLazy();
                if ($t = $adapter->getTag('cache.pool')) {
                    $tags[0] += $t[0];
                }
            }
            if (!isset($tags[0]['namespace'])) {
                $tags[0]['namespace'] = $this->getNamespace($seed, $id);
            }
            if (isset($tags[0]['clearer'])) {
                $clearer = strtolower($tags[0]['clearer']);
                while (isset($aliases[$clearer])) {
                    $clearer = (string) $aliases[$clearer];
                }
            } else {
                $clearer = null;
            }
            unset($tags[0]['clearer']);
            if (isset($tags[0]['provider'])) {
                $tags[0]['provider'] = new Reference(static::getServiceProvider($container, $tags[0]['provider']));
            }
            $i = 0;
            foreach ($attributes as $attr) {
                if (isset($tags[0][$attr])) {
                    $pool->replaceArgument($i++, $tags[0][$attr]);
                }
                unset($tags[0][$attr]);
            }
            if (!empty($tags[0])) {
                throw new InvalidArgumentException(sprintf('Invalid "cache.pool" tag for service "%s": accepted attributes are "clearer", "provider", "namespace" and "default_lifetime", found "%s".', $id, implode('", "', array_keys($tags[0]))));
            }
            $attr = array();
            if (null !== $clearer) {
                $attr['clearer'] = $clearer;
            }
            if (!$isLazy) {
                $pool->setLazy(true);
                $attr['unlazy'] = true;
            }
            if ($attr) {
                $pool->addTag('cache.pool', $attr);
            }
        }
    }