Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. ChainCache.php

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\Cache
View 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
RSS feed
Powered by Drupal