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'