You are here

public function NodeAccessGrantsCacheContext::getCacheableMetadata in Drupal 8

Same name and namespace in other branches
  1. 9 core/modules/node/src/Cache/NodeAccessGrantsCacheContext.php \Drupal\node\Cache\NodeAccessGrantsCacheContext::getCacheableMetadata()

Gets the cacheability metadata for the context based on the parameter value.

There are three valid cases for the returned CacheableMetadata object:

  • An empty object means this can be optimized away safely.
  • A max-age of 0 means that this context can never be optimized away. It will never bubble up and cache tags will not be used.
  • Any non-zero max-age and cache tags will bubble up into the cache item if this is optimized away to allow for invalidation if the context value changes.

Parameters

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

Return value

\Drupal\Core\Cache\CacheableMetadata A cacheable metadata object.

Throws

\LogicException Thrown if the passed in parameter is invalid.

Overrides CalculatedCacheContextInterface::getCacheableMetadata

File

core/modules/node/src/Cache/NodeAccessGrantsCacheContext.php, line 84

Class

NodeAccessGrantsCacheContext
Defines the node access view cache context service.

Namespace

Drupal\node\Cache

Code

public function getCacheableMetadata($operation = NULL) {
  $cacheable_metadata = new CacheableMetadata();
  if (!\Drupal::moduleHandler()
    ->getImplementations('node_grants')) {
    return $cacheable_metadata;
  }

  // The node grants may change if the user is updated. (The max-age is set to
  // zero below, but sites may override this cache context, and change it to a
  // non-zero value. In such cases, this cache tag is needed for correctness.)
  $cacheable_metadata
    ->setCacheTags([
    'user:' . $this->user
      ->id(),
  ]);

  // If the site is using node grants, this cache context can not be
  // optimized.
  return $cacheable_metadata
    ->setCacheMaxAge(0);
}