custom/plugins/SwkwebProductSet/src/Core/Content/ProductSet/Cache/CacheInvalidationSubscriber.php line 44

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Swkweb\ProductSet\Core\Content\ProductSet\Cache;
  3. use Shopware\Core\Content\Product\ProductDefinition;
  4. use Shopware\Core\Framework\Adapter\Cache\CacheInvalidator;
  5. use Shopware\Core\Framework\DataAbstractionLayer\Event\EntityWrittenContainerEvent;
  6. use Swkweb\ProductSet\Core\Content\ProductSet\Aggregate\ProductSetPriceCalculation\ProductSetPriceCalculationDefinition;
  7. use Swkweb\ProductSet\Core\Content\ProductSet\ProductSetDefinition;
  8. use Swkweb\ProductSet\Core\Content\ProductSet\SalesChannel\CachedProductSetRoute;
  9. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  10. class CacheInvalidationSubscriber implements EventSubscriberInterface
  11. {
  12.     private CacheInvalidator $cacheInvalidator;
  13.     public function __construct(CacheInvalidator $cacheInvalidator)
  14.     {
  15.         $this->cacheInvalidator $cacheInvalidator;
  16.     }
  17.     public static function getSubscribedEvents(): array
  18.     {
  19.         return [
  20.             EntityWrittenContainerEvent::class => [
  21.                 ['invalidateProductSetRoute'],
  22.                 ['invalidateProductSetIds'],
  23.                 ['invalidatePriceCalculationIds'],
  24.             ],
  25.         ];
  26.     }
  27.     public function invalidateProductSetRoute(EntityWrittenContainerEvent $event): void
  28.     {
  29.         $ids $event->getPrimaryKeys(ProductDefinition::ENTITY_NAME);
  30.         if (count($ids) === 0) {
  31.             return;
  32.         }
  33.         $this->cacheInvalidator->invalidate(array_map(fn (string $id) => CachedProductSetRoute::buildName($id), $ids));
  34.     }
  35.     public function invalidateProductSetIds(EntityWrittenContainerEvent $event): void
  36.     {
  37.         $ids $event->getPrimaryKeys(ProductSetDefinition::ENTITY_NAME);
  38.         if (count($ids) === 0) {
  39.             return;
  40.         }
  41.         $this->cacheInvalidator->invalidate(array_map(fn (string $id) => ProductSetCacheKeyGenerator::buildSetTag($id), $ids));
  42.     }
  43.     public function invalidatePriceCalculationIds(EntityWrittenContainerEvent $event): void
  44.     {
  45.         $ids $event->getPrimaryKeys(ProductSetPriceCalculationDefinition::ENTITY_NAME);
  46.         if (count($ids) === 0) {
  47.             return;
  48.         }
  49.         $this->cacheInvalidator->invalidate(array_map(fn (string $id) => ProductSetCacheKeyGenerator::buildPriceCalculationTag($id), $ids));
  50.     }
  51. }