vendor/ibexa/core/src/bundle/Core/EventSubscriber/ClearCollectedContentCacheSubscriber.php line 41

Open in your IDE?
  1. <?php
  2. /**
  3. * @copyright Copyright (C) Ibexa AS. All rights reserved.
  4. * @license For full copyright and license information view LICENSE file distributed with this source code.
  5. */
  6. declare(strict_types=1);
  7. namespace Ibexa\Bundle\Core\EventSubscriber;
  8. use Ibexa\Core\Persistence\Cache\Identifier\CacheIdentifierGeneratorInterface;
  9. use Ibexa\Core\Repository\Collector\ContentCollector;
  10. use Symfony\Component\Cache\Adapter\TagAwareAdapterInterface;
  11. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  12. use Symfony\Component\HttpKernel\Event\TerminateEvent;
  13. use Symfony\Component\HttpKernel\KernelEvents;
  14. final class ClearCollectedContentCacheSubscriber implements EventSubscriberInterface
  15. {
  16. private TagAwareAdapterInterface $cache;
  17. private CacheIdentifierGeneratorInterface $identifierGenerator;
  18. private ContentCollector $contentCollector;
  19. public function __construct(
  20. ContentCollector $contentCollector,
  21. TagAwareAdapterInterface $cache,
  22. CacheIdentifierGeneratorInterface $identifierGenerator
  23. ) {
  24. $this->cache = $cache;
  25. $this->identifierGenerator = $identifierGenerator;
  26. $this->contentCollector = $contentCollector;
  27. }
  28. public static function getSubscribedEvents(): array
  29. {
  30. return [KernelEvents::TERMINATE => 'clearCache'];
  31. }
  32. public function clearCache(TerminateEvent $event): void
  33. {
  34. foreach ($this->contentCollector->getCollectedContentIds() as $contentId) {
  35. $this->cache->invalidateTags([
  36. $this->identifierGenerator->generateTag('content', [$contentId]),
  37. ]);
  38. }
  39. $this->contentCollector->reset();
  40. }
  41. }