class ChainCache
Chains several caches together.
Cached items are fetched from the first cache having them in its data store. They are saved and deleted in all adapters at once.
@author Quentin Devos <quentin@devos.pm>
Hierarchy
- class \Twig\Cache\ChainCache implements \Twig\Cache\CacheInterface, \Twig\Cache\RemovableCacheInterface
Expanded class hierarchy of ChainCache
File
-
vendor/
twig/ twig/ src/ Cache/ ChainCache.php, line 22
Namespace
Twig\CacheView source
final class ChainCache implements CacheInterface, RemovableCacheInterface {
/**
* @param iterable<CacheInterface> $caches The ordered list of caches used to store and fetch cached items
*/
public function __construct(iterable $caches) {
}
public function generateKey(string $name, string $className) : string {
return $className . '#' . $name;
}
public function write(string $key, string $content) : void {
$splitKey = $this->splitKey($key);
foreach ($this->caches as $cache) {
$cache->write($cache->generateKey(...$splitKey), $content);
}
}
public function load(string $key) : void {
[
$name,
$className,
] = $this->splitKey($key);
foreach ($this->caches as $cache) {
$cache->load($cache->generateKey($name, $className));
if (class_exists($className, false)) {
break;
}
}
}
public function getTimestamp(string $key) : int {
$splitKey = $this->splitKey($key);
foreach ($this->caches as $cache) {
if (0 < ($timestamp = $cache->getTimestamp($cache->generateKey(...$splitKey)))) {
return $timestamp;
}
}
return 0;
}
public function remove(string $name, string $cls) : void {
foreach ($this->caches as $cache) {
if ($cache instanceof RemovableCacheInterface) {
$cache->remove($name, $cls);
}
}
}
/**
* @return string[]
*/
private function splitKey(string $key) : array {
return array_reverse(explode('#', $key, 2));
}
}
Members
Title Sort descending | Modifiers | Object type | Summary | Overriden Title |
---|---|---|---|---|
ChainCache::generateKey | public | function | Generates a cache key for the given template class name. | Overrides CacheInterface::generateKey |
ChainCache::getTimestamp | public | function | Returns the modification timestamp of a key. | Overrides CacheInterface::getTimestamp |
ChainCache::load | public | function | Loads a template from the cache. | Overrides CacheInterface::load |
ChainCache::remove | public | function | Overrides RemovableCacheInterface::remove | |
ChainCache::splitKey | private | function | ||
ChainCache::write | public | function | Writes the compiled template to cache. | Overrides CacheInterface::write |
ChainCache::__construct | public | function |