Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
80.00% |
8 / 10 |
CRAP | |
91.30% |
42 / 46 |
CacheableMetadata | |
0.00% |
0 / 1 |
|
80.00% |
8 / 10 |
21.29 | |
91.30% |
42 / 46 |
getCacheTags | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
setCacheTags | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
getCacheContexts | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
setCacheContexts | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
getCacheMaxAge | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
setCacheMaxAge | |
100.00% |
1 / 1 |
2 | |
100.00% |
4 / 4 |
|||
merge | |
0.00% |
0 / 1 |
7.08 | |
88.24% |
15 / 17 |
|||
applyTo | |
100.00% |
1 / 1 |
1 | |
100.00% |
4 / 4 |
|||
createFromRenderArray | |
100.00% |
1 / 1 |
4 | |
100.00% |
5 / 5 |
|||
createFromObject | |
100.00% |
1 / 1 |
2 | |
100.00% |
9 / 9 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\Core\Cache\CacheableMetadata. | |
*/ | |
namespace Drupal\Core\Cache; | |
/** | |
* Defines a generic class for passing cacheability metadata. | |
* | |
* @ingroup cache | |
* | |
*/ | |
class CacheableMetadata implements RefinableCacheableDependencyInterface { | |
use RefinableCacheableDependencyTrait; | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getCacheTags() { | |
return $this->cacheTags; | |
} | |
/** | |
* Sets cache tags. | |
* | |
* @param string[] $cache_tags | |
* The cache tags to be associated. | |
* | |
* @return $this | |
*/ | |
public function setCacheTags(array $cache_tags) { | |
$this->cacheTags = $cache_tags; | |
return $this; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getCacheContexts() { | |
return $this->cacheContexts; | |
} | |
/** | |
* Sets cache contexts. | |
* | |
* @param string[] $cache_contexts | |
* The cache contexts to be associated. | |
* | |
* @return $this | |
*/ | |
public function setCacheContexts(array $cache_contexts) { | |
$this->cacheContexts = $cache_contexts; | |
return $this; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getCacheMaxAge() { | |
return $this->cacheMaxAge; | |
} | |
/** | |
* Sets the maximum age (in seconds). | |
* | |
* Defaults to Cache::PERMANENT | |
* | |
* @param int $max_age | |
* The max age to associate. | |
* | |
* @return $this | |
* | |
* @throws \InvalidArgumentException | |
* If a non-integer value is supplied. | |
*/ | |
public function setCacheMaxAge($max_age) { | |
if (!is_int($max_age)) { | |
throw new \InvalidArgumentException('$max_age must be an integer'); | |
} | |
$this->cacheMaxAge = $max_age; | |
return $this; | |
} | |
/** | |
* Merges the values of another CacheableMetadata object with this one. | |
* | |
* @param \Drupal\Core\Cache\CacheableMetadata $other | |
* The other CacheableMetadata object. | |
* | |
* @return static | |
* A new CacheableMetadata object, with the merged data. | |
*/ | |
public function merge(CacheableMetadata $other) { | |
$result = clone $this; | |
// This is called many times per request, so avoid merging unless absolutely | |
// necessary. | |
if (empty($this->cacheContexts)) { | |
$result->cacheContexts = $other->cacheContexts; | |
} | |
elseif (empty($other->cacheContexts)) { | |
$result->cacheContexts = $this->cacheContexts; | |
} | |
else { | |
$result->cacheContexts = Cache::mergeContexts($this->cacheContexts, $other->cacheContexts); | |
} | |
if (empty($this->cacheTags)) { | |
$result->cacheTags = $other->cacheTags; | |
} | |
elseif (empty($other->cacheTags)) { | |
$result->cacheTags = $this->cacheTags; | |
} | |
else { | |
$result->cacheTags = Cache::mergeTags($this->cacheTags, $other->cacheTags); | |
} | |
if ($this->cacheMaxAge === Cache::PERMANENT) { | |
$result->cacheMaxAge = $other->cacheMaxAge; | |
} | |
elseif ($other->cacheMaxAge === Cache::PERMANENT) { | |
$result->cacheMaxAge = $this->cacheMaxAge; | |
} | |
else { | |
$result->cacheMaxAge = Cache::mergeMaxAges($this->cacheMaxAge, $other->cacheMaxAge); | |
} | |
return $result; | |
} | |
/** | |
* Applies the values of this CacheableMetadata object to a render array. | |
* | |
* @param array &$build | |
* A render array. | |
*/ | |
public function applyTo(array &$build) { | |
$build['#cache']['contexts'] = $this->cacheContexts; | |
$build['#cache']['tags'] = $this->cacheTags; | |
$build['#cache']['max-age'] = $this->cacheMaxAge; | |
} | |
/** | |
* Creates a CacheableMetadata object with values taken from a render array. | |
* | |
* @param array $build | |
* A render array. | |
* | |
* @return static | |
*/ | |
public static function createFromRenderArray(array $build) { | |
$meta = new static(); | |
$meta->cacheContexts = (isset($build['#cache']['contexts'])) ? $build['#cache']['contexts'] : []; | |
$meta->cacheTags = (isset($build['#cache']['tags'])) ? $build['#cache']['tags'] : []; | |
$meta->cacheMaxAge = (isset($build['#cache']['max-age'])) ? $build['#cache']['max-age'] : Cache::PERMANENT; | |
return $meta; | |
} | |
/** | |
* Creates a CacheableMetadata object from a depended object. | |
* | |
* @param \Drupal\Core\Cache\CacheableDependencyInterface|mixed $object | |
* The object whose cacheability metadata to retrieve. If it implements | |
* CacheableDependencyInterface, its cacheability metadata will be used, | |
* otherwise, the passed in object must be assumed to be uncacheable, so | |
* max-age 0 is set. | |
* | |
* @return static | |
*/ | |
public static function createFromObject($object) { | |
if ($object instanceof CacheableDependencyInterface) { | |
$meta = new static(); | |
$meta->cacheContexts = $object->getCacheContexts(); | |
$meta->cacheTags = $object->getCacheTags(); | |
$meta->cacheMaxAge = $object->getCacheMaxAge(); | |
return $meta; | |
} | |
// Objects that don't implement CacheableDependencyInterface must be assumed | |
// to be uncacheable, so set max-age 0. | |
$meta = new static(); | |
$meta->cacheMaxAge = 0; | |
return $meta; | |
} | |
} |