public function CacheContextsManager::convertTokensToKeys in Drupal 8
Same name and namespace in other branches
- 9 core/lib/Drupal/Core/Cache/Context/CacheContextsManager.php \Drupal\Core\Cache\Context\CacheContextsManager::convertTokensToKeys()
- 10 core/lib/Drupal/Core/Cache/Context/CacheContextsManager.php \Drupal\Core\Cache\Context\CacheContextsManager::convertTokensToKeys()
Converts cache context tokens to cache keys.
A cache context token is either:
- a cache context ID (if the service ID is 'cache_context.foo', then 'foo' is a cache context ID); for example, 'foo'.
- a calculated cache context ID, followed by a colon, followed by the parameter for the calculated cache context; for example, 'bar:some_parameter'.
Parameters
string[] $context_tokens: An array of cache context tokens.
Return value
\Drupal\Core\Cache\Context\ContextCacheKeys The ContextCacheKeys object containing the converted cache keys and cacheability metadata.
File
- core/
lib/ Drupal/ Core/ Cache/ Context/ CacheContextsManager.php, line 102
Class
- CacheContextsManager
- Converts cache context tokens into cache keys.
Namespace
Drupal\Core\Cache\ContextCode
public function convertTokensToKeys(array $context_tokens) {
assert($this
->assertValidTokens($context_tokens));
$cacheable_metadata = new CacheableMetadata();
$optimized_tokens = $this
->optimizeTokens($context_tokens);
// Iterate over cache contexts that have been optimized away and get their
// cacheability metadata.
foreach (static::parseTokens(array_diff($context_tokens, $optimized_tokens)) as $context_token) {
list($context_id, $parameter) = $context_token;
$context = $this
->getService($context_id);
$cacheable_metadata = $cacheable_metadata
->merge($context
->getCacheableMetadata($parameter));
}
sort($optimized_tokens);
$keys = [];
foreach (array_combine($optimized_tokens, static::parseTokens($optimized_tokens)) as $context_token => $context) {
list($context_id, $parameter) = $context;
$keys[] = '[' . $context_token . ']=' . $this
->getService($context_id)
->getContext($parameter);
}
// Create the returned object and merge in the cacheability metadata.
$context_cache_keys = new ContextCacheKeys($keys);
return $context_cache_keys
->merge($cacheable_metadata);
}