vendor/shopware/platform/src/Core/System/Language/CachedLanguageLoader.php line 51

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Shopware\Core\System\Language;
  3. use Psr\Cache\CacheItemPoolInterface;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. class CachedLanguageLoader implements LanguageLoaderInterfaceEventSubscriberInterface
  6. {
  7.     private const CACHE_KEY 'shopware.languages';
  8.     /**
  9.      * @var CacheItemPoolInterface
  10.      */
  11.     private $cache;
  12.     /**
  13.      * @var LanguageLoaderInterface
  14.      */
  15.     private $loader;
  16.     public function __construct(LanguageLoaderInterface $loaderCacheItemPoolInterface $cache)
  17.     {
  18.         $this->cache $cache;
  19.         $this->loader $loader;
  20.     }
  21.     public static function getSubscribedEvents(): array
  22.     {
  23.         return [
  24.             LanguageEvents::LANGUAGE_DELETED_EVENT => 'invalidateCache',
  25.             LanguageEvents::LANGUAGE_WRITTEN_EVENT => 'invalidateCache',
  26.         ];
  27.     }
  28.     public function loadLanguages(): array
  29.     {
  30.         $cacheItem $this->cache->getItem(self::CACHE_KEY);
  31.         if ($cacheItem->isHit()) {
  32.             return $cacheItem->get();
  33.         }
  34.         $languages $this->loader->loadLanguages();
  35.         $cacheItem->set($languages);
  36.         $this->cache->save($cacheItem);
  37.         return $languages;
  38.     }
  39.     public function invalidateCache(): void
  40.     {
  41.         $cacheItem $this->cache->getItem(self::CACHE_KEY);
  42.         if (!$cacheItem->isHit()) {
  43.             return;
  44.         }
  45.         $this->cache->deleteItem($cacheItem->getKey());
  46.     }
  47. }