public function CacheContextsPass::process

public CacheContextsPass::process(ContainerBuilder $container)

Implements CompilerPassInterface::process().

Collects the cache contexts into the cache_contexts parameter.

Overrides CompilerPassInterface::process

File

core/lib/Drupal/Core/Cache/Context/CacheContextsPass.php, line 18

Class

CacheContextsPass
Adds cache_contexts parameter to the container.

Namespace

Drupal\Core\Cache\Context

Code

public function process(ContainerBuilder $container) {
  $cache_contexts = [];
  foreach (array_keys($container->findTaggedServiceIds('cache.context')) as $id) {
    if (strpos($id, 'cache_context.') !== 0) {
      throw new \InvalidArgumentException(sprintf('The service "%s" has an invalid service ID: cache context service IDs must use the "cache_context." prefix. (The suffix is the cache context ID developers may use.)', $id));
    }
    $cache_contexts[] = substr($id, 14);
  }

  // Validate.
  sort($cache_contexts);
  foreach ($cache_contexts as $id) {
    // Validate the hierarchy of non-root-level cache contexts.
    if (strpos($id, '.') !== FALSE) {
      $parent = substr($id, 0, strrpos($id, '.'));
      if (!in_array($parent, $cache_contexts)) {
        throw new \InvalidArgumentException(sprintf('The service "%s" has an invalid service ID: the period indicates the hierarchy of cache contexts, therefore "%s" is considered the parent cache context, but no cache context service with that name was found.', $id, $parent));
      }
    }
  }


  $container->setParameter('cache_contexts', $cache_contexts);
}

© 2001–2016 by the original authors
Licensed under the GNU General Public License, version 2 and later.
Drupal is a registered trademark of Dries Buytaert.
https://api.drupal.org/api/drupal/core!lib!Drupal!Core!Cache!Context!CacheContextsPass.php/function/CacheContextsPass::process/8.1.x