Same filename and directory in other branches
- 8.9.x core/lib/Drupal/Core/Cache/BackendChain.php
- 9 core/lib/Drupal/Core/Cache/BackendChain.php
Namespace
Drupal\Core\Cache
File
core/lib/Drupal/Core/Cache/BackendChain.php
View source
<?php
namespace Drupal\Core\Cache;
class BackendChain implements CacheBackendInterface, CacheTagsInvalidatorInterface {
protected $backends = [];
public function appendBackend(CacheBackendInterface $backend) {
$this->backends[] = $backend;
return $this;
}
public function prependBackend(CacheBackendInterface $backend) {
array_unshift($this->backends, $backend);
return $this;
}
public function get($cid, $allow_invalid = FALSE) {
foreach ($this->backends as $index => $backend) {
if (($return = $backend
->get($cid, $allow_invalid)) !== FALSE) {
if ($index > 0) {
for ($i = $index - 1; 0 <= $i; --$i) {
$this->backends[$i]
->set($cid, $return->data, $return->expire, $return->tags);
}
}
return $return;
}
}
return FALSE;
}
public function getMultiple(&$cids, $allow_invalid = FALSE) {
$return = [];
foreach ($this->backends as $index => $backend) {
$items = $backend
->getMultiple($cids, $allow_invalid);
if ($index > 0 && !empty($items)) {
for ($i = $index - 1; 0 <= $i; --$i) {
foreach ($items as $cached) {
$this->backends[$i]
->set($cached->cid, $cached->data, $cached->expire, $cached->tags);
}
}
}
$return += $items;
if (empty($cids)) {
break;
}
}
return $return;
}
public function set($cid, $data, $expire = Cache::PERMANENT, array $tags = []) {
foreach ($this->backends as $backend) {
$backend
->set($cid, $data, $expire, $tags);
}
}
public function setMultiple(array $items) {
foreach ($this->backends as $backend) {
$backend
->setMultiple($items);
}
}
public function delete($cid) {
foreach ($this->backends as $backend) {
$backend
->delete($cid);
}
}
public function deleteMultiple(array $cids) {
foreach ($this->backends as $backend) {
$backend
->deleteMultiple($cids);
}
}
public function deleteAll() {
foreach ($this->backends as $backend) {
$backend
->deleteAll();
}
}
public function invalidate($cid) {
foreach ($this->backends as $backend) {
$backend
->invalidate($cid);
}
}
public function invalidateMultiple(array $cids) {
foreach ($this->backends as $backend) {
$backend
->invalidateMultiple($cids);
}
}
public function invalidateTags(array $tags) {
foreach ($this->backends as $backend) {
if ($backend instanceof CacheTagsInvalidatorInterface) {
$backend
->invalidateTags($tags);
}
}
}
public function invalidateAll() {
foreach ($this->backends as $backend) {
$backend
->invalidateAll();
}
}
public function garbageCollection() {
foreach ($this->backends as $backend) {
$backend
->garbageCollection();
}
}
public function removeBin() {
foreach ($this->backends as $backend) {
$backend
->removeBin();
}
}
}
Classes
Name |
Description |
BackendChain |
Defines a chained cache implementation for combining multiple cache backends. |