vendor/shopware/core/System/Language/CachedLanguageLoader.php line 53

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Shopware\Core\System\Language;
  3. use Shopware\Core\Framework\Log\Package;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Symfony\Contracts\Cache\CacheInterface;
  6. /**
  7. * @deprecated tag:v6.5.0 - reason:becomes-internal - EventSubscribers will become internal in v6.5.0
  8. *
  9. * @phpstan-import-type LanguageData from LanguageLoaderInterface
  10. */
  11. #[Package('core')]
  12. class CachedLanguageLoader implements LanguageLoaderInterface, EventSubscriberInterface
  13. {
  14. private const CACHE_KEY = 'shopware.languages';
  15. private CacheInterface $cache;
  16. private LanguageLoaderInterface $loader;
  17. /**
  18. * @internal
  19. */
  20. public function __construct(LanguageLoaderInterface $loader, CacheInterface $cache)
  21. {
  22. $this->cache = $cache;
  23. $this->loader = $loader;
  24. }
  25. /**
  26. * @return array<string, string>
  27. */
  28. public static function getSubscribedEvents(): array
  29. {
  30. return [
  31. LanguageEvents::LANGUAGE_DELETED_EVENT => 'invalidateCache',
  32. LanguageEvents::LANGUAGE_WRITTEN_EVENT => 'invalidateCache',
  33. ];
  34. }
  35. /**
  36. * @return LanguageData
  37. */
  38. public function loadLanguages(): array
  39. {
  40. return $this->cache->get(self::CACHE_KEY, function () {
  41. return $this->loader->loadLanguages();
  42. });
  43. }
  44. public function invalidateCache(): void
  45. {
  46. $this->cache->delete(self::CACHE_KEY);
  47. }
  48. }