CacheContextsPass.php in Zircon Profile 8.0
File
core/lib/Drupal/Core/Cache/Context/CacheContextsPass.php
View source
<?php
namespace Drupal\Core\Cache\Context;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
class CacheContextsPass implements CompilerPassInterface {
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);
}
sort($cache_contexts);
foreach ($cache_contexts as $id) {
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);
}
}