You are here

class CacheTagsInvalidator in Drupal 9

Same name and namespace in other branches
  1. 8 core/lib/Drupal/Core/Cache/CacheTagsInvalidator.php \Drupal\Core\Cache\CacheTagsInvalidator

Passes cache tag events to classes that wish to respond to them.

Hierarchy

Expanded class hierarchy of CacheTagsInvalidator

1 file declares its use of CacheTagsInvalidator
CacheTagsInvalidatorTest.php in core/tests/Drupal/Tests/Core/Cache/CacheTagsInvalidatorTest.php
1 string reference to 'CacheTagsInvalidator'
core.services.yml in core/core.services.yml
core/core.services.yml
1 service uses CacheTagsInvalidator
cache_tags.invalidator in core/core.services.yml
Drupal\Core\Cache\CacheTagsInvalidator

File

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

Namespace

Drupal\Core\Cache
View source
class CacheTagsInvalidator implements CacheTagsInvalidatorInterface {
  use ContainerAwareTrait;

  /**
   * Holds an array of cache tags invalidators.
   *
   * @var \Drupal\Core\Cache\CacheTagsInvalidatorInterface[]
   */
  protected $invalidators = [];

  /**
   * {@inheritdoc}
   */
  public function invalidateTags(array $tags) {
    assert(Inspector::assertAllStrings($tags), 'Cache tags must be strings.');

    // Notify all added cache tags invalidators.
    foreach ($this->invalidators as $invalidator) {
      $invalidator
        ->invalidateTags($tags);
    }

    // Additionally, notify each cache bin if it implements the service.
    foreach ($this
      ->getInvalidatorCacheBins() as $bin) {
      $bin
        ->invalidateTags($tags);
    }
  }

  /**
   * Reset statically cached tags in all cache tag checksum services.
   *
   * This is only used by tests.
   */
  public function resetChecksums() {
    foreach ($this->invalidators as $invalidator) {
      if ($invalidator instanceof CacheTagsChecksumInterface) {
        $invalidator
          ->reset();
      }
    }
  }

  /**
   * Adds a cache tags invalidator.
   *
   * @param \Drupal\Core\Cache\CacheTagsInvalidatorInterface $invalidator
   *   A cache invalidator.
   */
  public function addInvalidator(CacheTagsInvalidatorInterface $invalidator) {
    $this->invalidators[] = $invalidator;
  }

  /**
   * Returns all cache bins that need to be notified about invalidations.
   *
   * @return \Drupal\Core\Cache\CacheTagsInvalidatorInterface[]
   *   An array of cache backend objects that implement the invalidator
   *   interface, keyed by their cache bin.
   */
  protected function getInvalidatorCacheBins() {
    $bins = [];
    foreach ($this->container
      ->getParameter('cache_bins') as $service_id => $bin) {
      $service = $this->container
        ->get($service_id);
      if ($service instanceof CacheTagsInvalidatorInterface) {
        $bins[$bin] = $service;
      }
    }
    return $bins;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
CacheTagsInvalidator::$invalidators protected property Holds an array of cache tags invalidators.
CacheTagsInvalidator::addInvalidator public function Adds a cache tags invalidator.
CacheTagsInvalidator::getInvalidatorCacheBins protected function Returns all cache bins that need to be notified about invalidations.
CacheTagsInvalidator::invalidateTags public function Marks cache items with any of the specified tags as invalid. Overrides CacheTagsInvalidatorInterface::invalidateTags
CacheTagsInvalidator::resetChecksums public function Reset statically cached tags in all cache tag checksum services.