CacheContextsManager::validateTokens

public CacheContextsManager::validateTokens(array $context_tokens = [])

Validates an array of cache context tokens.

Can be called before using cache contexts in operations, to check validity.

Parameters

string[] $context_tokens: An array of cache context tokens.

Throws

\LogicException

See also

\Drupal\Core\Cache\Context\CacheContextsManager::parseTokens()

File

core/lib/Drupal/Core/Cache/Context/CacheContextsManager.php, line 258

Class

CacheContextsManager
Converts cache context tokens into cache keys.

Namespace

Drupal\Core\Cache\Context

Code

public function validateTokens(array $context_tokens = []) {
  if (empty($context_tokens)) {
    return;
  }

  // Initialize the set of valid context tokens with the container's contexts.
  if (!isset($this->validContextTokens)) {
    $this->validContextTokens = array_flip($this->contexts);
  }

  foreach ($context_tokens as $context_token) {
    if (!is_string($context_token)) {
      throw new \LogicException(sprintf('Cache contexts must be strings, %s given.', gettype($context_token)));
    }

    if (isset($this->validContextTokens[$context_token])) {
      continue;
    }

    // If it's a valid context token, then the ID must be stored in the set
    // of valid context tokens (since we initialized it with the list of cache
    // context IDs using the container). In case of an invalid context token,
    // throw an exception, otherwise cache it, including the parameter, to
    // minimize the amount of work in future ::validateContexts() calls.
    $context_id = $context_token;
    $colon_pos = strpos($context_id, ':');
    if ($colon_pos !== FALSE) {
      $context_id = substr($context_id, 0, $colon_pos);
    }
    if (isset($this->validContextTokens[$context_id])) {
      $this->validContextTokens[$context_token] = TRUE;
    }
    else {
      throw new \LogicException(sprintf('"%s" is not a valid cache context ID.', $context_id));
    }
  }
}
doc_Drupal
2016-10-29 08:49:28
Comments
Leave a Comment

Please login to continue.