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]
This commit is contained in:
committed by
Veljko V
parent
503283fa63
commit
86e938b46e
@@ -2,29 +2,28 @@
|
|||||||
|
|
||||||
namespace MailPoet\Doctrine\Annotations;
|
namespace MailPoet\Doctrine\Annotations;
|
||||||
|
|
||||||
|
use MailPoet\Doctrine\PSRArrayCache;
|
||||||
use MailPoetVendor\Doctrine\Common\Annotations\AnnotationReader;
|
use MailPoetVendor\Doctrine\Common\Annotations\AnnotationReader;
|
||||||
use MailPoetVendor\Doctrine\Common\Annotations\AnnotationRegistry;
|
use MailPoetVendor\Doctrine\Common\Annotations\AnnotationRegistry;
|
||||||
use MailPoetVendor\Doctrine\Common\Annotations\CachedReader;
|
use MailPoetVendor\Doctrine\Common\Annotations\PsrCachedReader;
|
||||||
use MailPoetVendor\Doctrine\Common\Cache\ArrayCache;
|
|
||||||
|
|
||||||
class AnnotationReaderProvider {
|
class AnnotationReaderProvider {
|
||||||
/** @var CachedReader */
|
/** @var PsrCachedReader */
|
||||||
private $annotationReader;
|
private $annotationReader;
|
||||||
|
|
||||||
public function __construct() {
|
public function __construct() {
|
||||||
// register annotation reader if doctrine/annotations package is installed
|
// register annotation reader if doctrine/annotations package is installed
|
||||||
// (i.e. in dev environment, on production metadata is dumped in the build)
|
// (i.e. in dev environment, on production metadata is dumped in the build)
|
||||||
$readAnnotations = class_exists(CachedReader::class) && class_exists(AnnotationReader::class);
|
$readAnnotations = class_exists(PsrCachedReader::class) && class_exists(AnnotationReader::class);
|
||||||
if ($readAnnotations) {
|
if ($readAnnotations) {
|
||||||
// autoload all annotation classes using registered loaders (Composer)
|
// autoload all annotation classes using registered loaders (Composer)
|
||||||
// (needed for Symfony\Validator constraint annotations to be loaded)
|
// (needed for Symfony\Validator constraint annotations to be loaded)
|
||||||
AnnotationRegistry::registerLoader('class_exists');
|
AnnotationRegistry::registerLoader('class_exists');
|
||||||
$this->annotationReader = new CachedReader(new AnnotationReader(), new ArrayCache());
|
$this->annotationReader = new PsrCachedReader(new AnnotationReader(), new PSRArrayCache());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @return CachedReader|null */
|
public function getAnnotationReader(): ?PsrCachedReader {
|
||||||
public function getAnnotationReader() {
|
|
||||||
return $this->annotationReader;
|
return $this->annotationReader;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
88
lib/Doctrine/PSRArrayCache.php
Normal file
88
lib/Doctrine/PSRArrayCache.php
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
<?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;
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user