class CacheFactory

Same name and namespace in other branches
  1. 9 core/lib/Drupal/Core/Cache/CacheFactory.php \Drupal\Core\Cache\CacheFactory
  2. 8.9.x core/lib/Drupal/Core/Cache/CacheFactory.php \Drupal\Core\Cache\CacheFactory
  3. 11.x core/lib/Drupal/Core/Cache/CacheFactory.php \Drupal\Core\Cache\CacheFactory

Hierarchy

Expanded class hierarchy of CacheFactory

2 files declare their use of CacheFactory
CacheFactoryTest.php in core/tests/Drupal/Tests/Core/Cache/CacheFactoryTest.php
ServiceProviderTest.php in core/tests/Drupal/KernelTests/Core/ServiceProvider/ServiceProviderTest.php
1 string reference to 'CacheFactory'
core.services.yml in core/core.services.yml
core/core.services.yml
1 service uses CacheFactory
cache_factory in core/core.services.yml
Drupal\Core\Cache\CacheFactory

File

core/lib/Drupal/Core/Cache/CacheFactory.php, line 11

Namespace

Drupal\Core\Cache
View source
class CacheFactory implements CacheFactoryInterface {
  
  /**
   * The site settings.
   *
   * @var \Drupal\Core\Site\Settings
   */
  protected $settings;
  
  /**
   * A map of cache bin to default cache backend service name.
   *
   * All bin-specific mappings in $settings take precedence over this, but it
   * can be used to optimize cache storage for a Drupal installation without
   * cache customizations in settings.php. For example, this can be used to map
   * the 'bootstrap' bin to 'cache.backend.chainedfast', while allowing other
   * bins to fall back to the global default of 'cache.backend.database'.
   *
   * @var array
   */
  protected $defaultBinBackends;
  
  /**
   * A map of cache bin to default cache memory backend service name.
   *
   * All bin-specific mappings in $settings take precedence over this, but it
   * can be used to optimize cache storage for a Drupal installation without
   * cache customizations in settings.php.
   *
   * @var array
   */
  protected $memoryDefaultBinBackends;
  
  /**
   * The service container.
   */
  protected ContainerInterface $container;
  
  /**
   * Sets the service container.
   */
  public function setContainer(ContainerInterface $container) : void {
    $this->container = $container;
  }
  
  /**
   * Constructs CacheFactory object.
   *
   * @param \Drupal\Core\Site\Settings $settings
   *   The site settings.
   * @param array $default_bin_backends
   *   (optional) A mapping of bin to backend service name. Mappings in
   *   $settings take precedence over this.
   * @param array $memory_default_bin_backends
   *   (optional) A mapping of bin to backend service name. Mappings in
   *   $settings take precedence over this.
   */
  public function __construct(Settings $settings, array $default_bin_backends = [], array $memory_default_bin_backends = []) {
    $this->settings = $settings;
    $this->defaultBinBackends = $default_bin_backends;
    $this->memoryDefaultBinBackends = $memory_default_bin_backends;
  }
  
  /**
   * Instantiates a cache backend class for a given cache bin.
   *
   * By default, this returns an instance of the
   * Drupal\Core\Cache\DatabaseBackend class.
   *
   * Classes implementing Drupal\Core\Cache\CacheBackendInterface can register
   * themselves both as a default implementation and for specific bins.
   *
   * @param string $bin
   *   The cache bin for which a cache backend object should be returned.
   *
   * @return \Drupal\Core\Cache\CacheBackendInterface
   *   The cache backend object associated with the specified bin.
   */
  public function get($bin) {
    $cache_settings = $this->settings
      ->get('cache');
    // First, look for a cache bin specific setting.
    if (isset($cache_settings['bins'][$bin])) {
      $service_name = $cache_settings['bins'][$bin];
    }
    elseif (isset($this->defaultBinBackends[$bin])) {
      $service_name = $this->defaultBinBackends[$bin];
    }
    elseif (isset($this->memoryDefaultBinBackends[$bin])) {
      $service_name = $this->memoryDefaultBinBackends[$bin];
    }
    elseif (isset($cache_settings['default'])) {
      $service_name = $cache_settings['default'];
    }
    else {
      // Fall back to the database backend if nothing else is configured.
      $service_name = 'cache.backend.database';
    }
    return $this->container
      ->get($service_name)
      ->get($bin);
  }

}

Members

Title Sort descending Modifiers Object type Summary
CacheFactory::$container protected property The service container.
CacheFactory::$defaultBinBackends protected property A map of cache bin to default cache backend service name.
CacheFactory::$memoryDefaultBinBackends protected property A map of cache bin to default cache memory backend service name.
CacheFactory::$settings protected property The site settings.
CacheFactory::get public function Instantiates a cache backend class for a given cache bin.
CacheFactory::setContainer public function Sets the service container.
CacheFactory::__construct public function Constructs CacheFactory object.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.