Files
piratepoet/lib/Doctrine/PSRArrayCache.php
Rostislav Wolny 86e938b46e Provide PSR array cache and switch annotation reader to it
The annotation reader was using CachedReader which has been deprecated so we need to switch to PsrCachedReader
Since 2.0 doctrine/cache no longer provides implementations of caches so I also needed to implement a simple PSR array cache.
[MAILPOET-3892]
2021-10-28 15:44:18 +02:00

89 lines
1.6 KiB
PHP

<?php
namespace MailPoet\Doctrine;
use MailPoetVendor\Psr\Cache\CacheItemInterface;
use MailPoetVendor\Psr\Cache\CacheItemPoolInterface;
class PSRArrayCache implements CacheItemPoolInterface {
/** @var mixed[] */
private $cache = [];
/**
* @inheritDoc
*/
public function getItem($key) {
if (!is_string($key)) {
throw new PSRCacheInvalidArgumentException('Invalid key');
}
if (!$this->hasItem($key)) {
return new PSRCacheItem($key, false);
}
return new PSRCacheItem($key, $this->cache[$key]);
}
public function getItems(array $keys = []) {
return array_map([$this, 'getItem'], $keys);
}
/**
* @inheritDoc
*/
public function hasItem($key) {
return array_key_exists($key, $this->cache);
}
/**
* @inheritDoc
*/
public function clear() {
$this->cache = [];
return true;
}
/**
* @inheritDoc
*/
public function deleteItem($key) {
if (!is_string($key)) {
throw new PSRCacheInvalidArgumentException('Invalid key');
}
unset($this->cache[$key]);
return true;
}
/**
* @inheritDoc
*/
public function deleteItems(array $keys) {
try {
array_map([$this, 'deleteItem'], $keys);
} catch (PSRCacheInvalidArgumentException $e) {
return false;
}
return true;
}
/**
* @inheritDoc
*/
public function save(CacheItemInterface $item) {
$this->cache[$item->getKey()] = $item->get();
return true;
}
/**
* @inheritDoc
*/
public function saveDeferred(CacheItemInterface $item) {
return $this->save($item);
}
/**
* @inheritDoc
*/
public function commit() {
return true;
}
}