CacheFactory.php

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

Namespace

Drupal\Core\Cache

File

core/lib/Drupal/Core/Cache/CacheFactory.php

View source
<?php

namespace Drupal\Core\Cache;


/**
 * Defines the cache backend factory.
 */
use Drupal\Core\Site\Settings;
use Psr\Container\ContainerInterface;
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);
    }

}

Classes

Title Deprecated Summary
CacheFactory

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