Spaces:
No application file
No application file
| declare(strict_types=1); | |
| namespace Mautic\CacheBundle\Cache; | |
| use Mautic\CoreBundle\Helper\CoreParametersHelper; | |
| use Psr\Cache\CacheItemInterface; | |
| use Psr\Cache\InvalidArgumentException as Psr6CacheInterface; | |
| use Symfony\Component\Cache\Adapter\TagAwareAdapterInterface; | |
| use Symfony\Component\Cache\CacheItem; | |
| use Symfony\Component\Cache\Exception\InvalidArgumentException; | |
| use Symfony\Component\Cache\Psr16Cache; | |
| use Symfony\Component\DependencyInjection\ContainerInterface; | |
| /** | |
| * Povides caching mechanism using adapters, it provides both PSR-6 and PSR-16. | |
| */ | |
| final class CacheProvider implements CacheProviderInterface | |
| { | |
| private ?Psr16Cache $psr16 = null; | |
| public function __construct( | |
| private CoreParametersHelper $coreParametersHelper, | |
| private ContainerInterface $container | |
| ) { | |
| } | |
| public function getCacheAdapter(): TagAwareAdapterInterface | |
| { | |
| $selectedAdapter = $this->coreParametersHelper->get('cache_adapter'); | |
| if (!$selectedAdapter || !$this->container->has($selectedAdapter)) { | |
| throw new InvalidArgumentException('Requested cache adapter "'.$selectedAdapter.'" is not available'); | |
| } | |
| $adaptor = $this->container->get($selectedAdapter); | |
| if (!$adaptor instanceof TagAwareAdapterInterface) { | |
| throw new InvalidArgumentException(sprintf('Requested cache adapter "%s" is not a %s', $selectedAdapter, TagAwareAdapterInterface::class)); | |
| } | |
| return $adaptor; | |
| } | |
| public function getSimpleCache(): Psr16Cache | |
| { | |
| if (is_null($this->psr16)) { | |
| $this->psr16 = new Psr16Cache($this->getCacheAdapter()); | |
| } | |
| return $this->psr16; | |
| } | |
| /** | |
| * @param string $key | |
| * | |
| * @throws Psr6CacheInterface | |
| */ | |
| public function getItem($key): CacheItem | |
| { | |
| return $this->getCacheAdapter()->getItem($key); | |
| } | |
| /** | |
| * @return CacheItem[]|\Traversable | |
| * | |
| * @throws Psr6CacheInterface | |
| */ | |
| public function getItems(array $keys = []): \Traversable | |
| { | |
| return $this->getCacheAdapter()->getItems($keys); | |
| } | |
| /** | |
| * @param string $key | |
| * | |
| * @throws Psr6CacheInterface | |
| */ | |
| public function hasItem($key): bool | |
| { | |
| return $this->getCacheAdapter()->hasItem($key); | |
| } | |
| public function clear(string $prefix = ''): bool | |
| { | |
| return $this->getCacheAdapter()->clear($prefix); | |
| } | |
| public function deleteItem($key): bool | |
| { | |
| return $this->getCacheAdapter()->deleteItem($key); | |
| } | |
| /** | |
| * Removes multiple items from the pool. | |
| * | |
| * @param string[] $keys An array of keys that should be removed from the pool | |
| * | |
| * @return bool True if the items were successfully removed. False if there was an error. | |
| * | |
| * @throws Psr6CacheInterface If any of the keys in $keys are not a legal value a \Psr\Cache\InvalidArgumentException | |
| * MUST be thrown | |
| */ | |
| public function deleteItems(array $keys): bool | |
| { | |
| return $this->getCacheAdapter()->deleteItems($keys); | |
| } | |
| /** | |
| * Persists a cache item immediately. | |
| * | |
| * @param CacheItemInterface $item The cache item to save | |
| * | |
| * @return bool True if the item was successfully persisted. False if there was an error. | |
| */ | |
| public function save(CacheItemInterface $item): bool | |
| { | |
| return $this->getCacheAdapter()->save($item); | |
| } | |
| /** | |
| * Sets a cache item to be persisted later. | |
| * | |
| * @param CacheItemInterface $item The cache item to save | |
| * | |
| * @return bool False if the item could not be queued or if a commit was attempted and failed. True otherwise. | |
| */ | |
| public function saveDeferred(CacheItemInterface $item): bool | |
| { | |
| return $this->getCacheAdapter()->saveDeferred($item); | |
| } | |
| /** | |
| * Persists any deferred cache items. | |
| * | |
| * @return bool True if all not-yet-saved items were successfully saved or there were none. False otherwise. | |
| */ | |
| public function commit(): bool | |
| { | |
| return $this->getCacheAdapter()->commit(); | |
| } | |
| /** | |
| * Invalidates cached items using tags. | |
| * | |
| * @param string[] $tags An array of tags to invalidate | |
| * | |
| * @return bool True on success | |
| * | |
| * @throws Psr6CacheInterface When $tags is not valid | |
| */ | |
| public function invalidateTags(array $tags): bool | |
| { | |
| return $this->getCacheAdapter()->invalidateTags($tags); | |
| } | |
| } | |