diff --git a/src/Business/Metadata/DriverMetadataFactory.php b/src/Business/Metadata/DriverMetadataFactory.php index d804599..180a90f 100644 --- a/src/Business/Metadata/DriverMetadataFactory.php +++ b/src/Business/Metadata/DriverMetadataFactory.php @@ -15,8 +15,12 @@ use Doctrine\ORM\Configuration; use Doctrine\ORM\ORMSetup; +use Micro\Plugin\Cache\Facade\CacheFacadeInterface; use Micro\Plugin\Doctrine\Business\Locator\EntityFileConfigurationLocatorFactoryInterface; +use Micro\Plugin\Doctrine\Configuration\EntityManagerConfigurationInterface; use Micro\Plugin\Doctrine\DoctrinePluginConfigurationInterface; +use Psr\Cache\CacheItemPoolInterface; +use Symfony\Component\Cache\Adapter\ArrayAdapter; /** * @author Stanislau Komar @@ -25,7 +29,8 @@ { public function __construct( private EntityFileConfigurationLocatorFactoryInterface $entityFileConfigurationLocatorFactory, - private DoctrinePluginConfigurationInterface $pluginConfiguration + private DoctrinePluginConfigurationInterface $pluginConfiguration, + private ?CacheFacadeInterface $cacheFacade ) { } @@ -41,4 +46,23 @@ public function create(string $entityManagerName): Configuration $proxyDir ); } + + private function createCacheItem(EntityManagerConfigurationInterface $configuration): CacheItemPoolInterface + { + $cacheItemPoolName = $configuration->getCacheItemPoolName(); + if(!$cacheItemPoolName) { + return new ArrayAdapter(); + } + + if ($this->cacheFacade === null && $cacheItemPoolName) { + throw new \RuntimeException(sprintf( + 'Cache pool "%s" is configured for entity manager, but cache plugin is not enabled. Please, install `composer require micro/plugin-cache`', + $cacheItemPoolName + )); + } + + + + return $this->cacheFacade->getCachePsr16($configuration->getCacheItemPoolName()); + } } diff --git a/src/Configuration/EntityManagerConfiguration.php b/src/Configuration/EntityManagerConfiguration.php index 0aca581..69d556d 100755 --- a/src/Configuration/EntityManagerConfiguration.php +++ b/src/Configuration/EntityManagerConfiguration.php @@ -40,6 +40,15 @@ class EntityManagerConfiguration extends PluginRoutingKeyConfiguration implement */ public const CFG_PROXY_DIR = 'ORM_%s_PROXY_DIR'; + /** + * Cache item pool name. + * + * Example `ORM_DEFAULT_CACHE_ITEM_POOL_NAME=default` + * + * @api + */ + public const CFG_CACHE_ITEM_POOL_NAME = 'ORM_%s_CACHE_ITEM_POOL_NAME'; + /** * @return string|null */ @@ -76,4 +85,9 @@ public function getAvailableDrivers(): array { return DriverManager::getAvailableDrivers(); } + + public function getCacheItemPoolName(): ?string + { + return $this->get(self::CFG_CACHE_ITEM_POOL_NAME, null, false); + } } diff --git a/src/Configuration/EntityManagerConfigurationInterface.php b/src/Configuration/EntityManagerConfigurationInterface.php index 37a1f41..88b45c6 100755 --- a/src/Configuration/EntityManagerConfigurationInterface.php +++ b/src/Configuration/EntityManagerConfigurationInterface.php @@ -33,6 +33,8 @@ public function getProxyDir(): ?string; */ public function getDriverName(): string; + public function getCacheItemPoolName(): ?string; + /** * Implemented: * 'pdo_mysql'