You are here

public function HeadersCacheContext::getContext in Drupal 8

Same name and namespace in other branches
  1. 9 core/lib/Drupal/Core/Cache/Context/HeadersCacheContext.php \Drupal\Core\Cache\Context\HeadersCacheContext::getContext()

Returns the string representation of the cache context.

A cache context service's name is used as a token (placeholder) cache key, and is then replaced with the string returned by this method.

Parameters

string|null $parameter: The parameter, or NULL to indicate all possible parameter values.

Return value

string The string representation of the cache context. When $parameter is NULL, a value representing all possible parameters must be generated.

Throws

\LogicException Thrown if the passed in parameter is invalid.

Overrides CalculatedCacheContextInterface::getContext

File

core/lib/Drupal/Core/Cache/Context/HeadersCacheContext.php, line 26

Class

HeadersCacheContext
Defines the HeadersCacheContext service, for "per header" caching.

Namespace

Drupal\Core\Cache\Context

Code

public function getContext($header = NULL) {
  if ($header === NULL) {
    $headers = $this->requestStack
      ->getCurrentRequest()->headers
      ->all();

    // Order headers by name to have less cache variations.
    ksort($headers);
    $result = '';
    foreach ($headers as $name => $value) {
      if ($result) {
        $result .= '&';
      }

      // Sort values to minimize cache variations.
      sort($value);
      $result .= $name . '=' . implode(',', $value);
    }
    return $result;
  }
  elseif ($this->requestStack
    ->getCurrentRequest()->headers
    ->has($header)) {
    $value = $this->requestStack
      ->getCurrentRequest()->headers
      ->get($header);
    if ($value !== '') {
      return $value;
    }
    return '?valueless?';
  }
  return '';
}