|
@@ -127,7 +127,7 @@ class DoctrineExtension extends AbstractDoctrineExtension
|
|
|
}
|
|
|
|
|
|
foreach ($configConnections as $name => $connection) {
|
|
|
- $connectionName = isset($connection['id']) ? $connection['id'] : $name;
|
|
|
+ $connectionName = isset($connection['name']) ? $connection['name'] : $name;
|
|
|
if (!isset($mergedConfig['connections'][$connectionName])) {
|
|
|
$mergedConfig['connections'][$connectionName] = $connectionDefaults;
|
|
|
}
|
|
@@ -202,13 +202,6 @@ class DoctrineExtension extends AbstractDoctrineExtension
|
|
|
));
|
|
|
}
|
|
|
|
|
|
- public function ormLoad(array $configs, ContainerBuilder $container)
|
|
|
- {
|
|
|
- foreach ($configs as $config) {
|
|
|
- $this->doOrmLoad($config, $container);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* Loads the Doctrine ORM configuration.
|
|
|
*
|
|
@@ -219,64 +212,129 @@ class DoctrineExtension extends AbstractDoctrineExtension
|
|
|
* @param array $config An array of configuration settings
|
|
|
* @param ContainerBuilder $container A ContainerBuilder instance
|
|
|
*/
|
|
|
- protected function doOrmLoad($config, ContainerBuilder $container)
|
|
|
+ public function ormLoad(array $configs, ContainerBuilder $container)
|
|
|
{
|
|
|
- $this->loadOrmDefaults($config, $container);
|
|
|
- $this->loadOrmEntityManagers($config, $container);
|
|
|
- }
|
|
|
+ $loader = new XmlFileLoader($container, __DIR__.'/../Resources/config');
|
|
|
+ $loader->load('orm.xml');
|
|
|
|
|
|
- /**
|
|
|
- * Loads the ORM default configuration.
|
|
|
- *
|
|
|
- * @param array $config An array of configuration settings
|
|
|
- * @param ContainerBuilder $container A ContainerBuilder instance
|
|
|
- */
|
|
|
- protected function loadOrmDefaults(array $config, ContainerBuilder $container)
|
|
|
- {
|
|
|
- // arbitrary service that is always part of the "orm" services. Its used to check if the
|
|
|
- // defaults have to applied (first time run) or ignored (second or n-th run due to imports)
|
|
|
- if (!$container->hasDefinition('doctrine.orm.metadata.annotation_reader')) {
|
|
|
- $loader = new XmlFileLoader($container, __DIR__.'/../Resources/config');
|
|
|
- $loader->load('orm.xml');
|
|
|
+ $config = $this->mergeOrmConfig($configs, $container);
|
|
|
+
|
|
|
+ $options = array('default_entity_manager', 'default_connection');
|
|
|
+ foreach ($options as $key) {
|
|
|
+ $container->setParameter('doctrine.orm.'.$key, $config[$key]);
|
|
|
}
|
|
|
|
|
|
- // Allow these application configuration options to override the defaults
|
|
|
- $options = array(
|
|
|
- 'default_entity_manager',
|
|
|
- 'default_connection',
|
|
|
- 'metadata_cache_driver',
|
|
|
- 'query_cache_driver',
|
|
|
- 'result_cache_driver',
|
|
|
- 'proxy_namespace',
|
|
|
- 'proxy_dir',
|
|
|
- 'auto_generate_proxy_classes',
|
|
|
- 'class_metadata_factory_name',
|
|
|
- );
|
|
|
- foreach ($options as $key) {
|
|
|
- if (isset($config[$key])) {
|
|
|
- $container->setParameter('doctrine.orm.'.$key, $config[$key]);
|
|
|
- }
|
|
|
+ foreach ($config['entity_managers'] as $entityManager) {
|
|
|
+ $this->loadOrmEntityManager($entityManager, $container);
|
|
|
|
|
|
- $nKey = str_replace('_', '-', $key);
|
|
|
- if (isset($config[$nKey])) {
|
|
|
- $container->setParameter('doctrine.orm.'.$key, $config[$nKey]);
|
|
|
+ if ($entityManager['name'] == $config['default_entity_manager']) {
|
|
|
+ $container->setAlias(
|
|
|
+ 'doctrine.orm.entity_manager',
|
|
|
+ sprintf('doctrine.orm.%s_entity_manager', $entityManager['name'])
|
|
|
+ );
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * Loads the configured ORM entity managers.
|
|
|
- *
|
|
|
- * @param array $config An array of configuration settings
|
|
|
- * @param ContainerBuilder $container A ContainerBuilder instance
|
|
|
- */
|
|
|
- protected function loadOrmEntityManagers(array $config, ContainerBuilder $container)
|
|
|
+ protected function mergeOrmConfig(array $configs, $container)
|
|
|
{
|
|
|
- $entityManagers = $this->getOrmEntityManagers($config, $container);
|
|
|
- foreach ($entityManagers as $name => $entityManager) {
|
|
|
- $entityManager['name'] = $name;
|
|
|
- $this->loadOrmEntityManager($entityManager, $container);
|
|
|
+ $supportedEntityManagerOptions = array(
|
|
|
+ 'metadata_cache_driver' => 'metadata_cache_driver',
|
|
|
+ 'query_cache_driver' => 'query_cache_driver',
|
|
|
+ 'result_cache_driver' => 'result_cache_driver',
|
|
|
+ 'class_metadata_factory_name' => 'class_metadata_factory_name',
|
|
|
+ 'metadata-cache-driver' => 'metadata_cache_driver',
|
|
|
+ 'query-cache-driver' => 'query_cache_driver',
|
|
|
+ 'result-cache-driver' => 'result_cache_driver',
|
|
|
+ 'class-metadata-factory-name' => 'class_metadata_factory_name',
|
|
|
+ 'connection' => 'connection'
|
|
|
+ );
|
|
|
+
|
|
|
+ $mergedConfig = array(
|
|
|
+ 'default_entity_manager' => 'default',
|
|
|
+ 'default_connection' => 'default',
|
|
|
+ 'entity_managers' => array(),
|
|
|
+ );
|
|
|
+
|
|
|
+ $defaultManagerOptions = array(
|
|
|
+ 'proxy_dir' => $container->getParameter('doctrine.orm.proxy_dir'),
|
|
|
+ 'proxy_namespace' => $container->getParameter('doctrine.orm.proxy_namespace'),
|
|
|
+ 'auto_generate_proxy_classes' => false,
|
|
|
+ 'metadata_cache_driver' => $container->getParameter('doctrine.orm.metadata_cache_driver'),
|
|
|
+ 'query_cache_driver' => $container->getParameter('doctrine.orm.query_cache_driver'),
|
|
|
+ 'result_cache_driver' => $container->getParameter('doctrine.orm.result_cache_driver'),
|
|
|
+ 'configuration_class' => $container->getParameter('doctrine.orm.configuration_class'),
|
|
|
+ 'entity_manager_class' => $container->getParameter('doctrine.orm.entity_manager_class'),
|
|
|
+ 'class_metadata_factory_name' => $container->getParameter('doctrine.orm.class_metadata_factory_name'),
|
|
|
+ );
|
|
|
+
|
|
|
+ foreach ($configs AS $config) {
|
|
|
+ if (isset($config['default-entity-manager'])) {
|
|
|
+ $mergedConfig['default_entity_manager'] = $config['default-entity-manager'];
|
|
|
+ } else if (isset($config['default_entity_manager'])) {
|
|
|
+ $mergedConfig['default_entity_manager'] = $config['default_entity_manager'];
|
|
|
+ }
|
|
|
+ if (isset($config['default-connection'])) {
|
|
|
+ $mergedConfig['default_connection'] = $config['default-connection'];
|
|
|
+ } else if (isset($config['default_connection'])) {
|
|
|
+ $mergedConfig['default_connection'] = $config['default_connection'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $defaultManagerOptions['connection'] = $mergedConfig['default_connection'];
|
|
|
+
|
|
|
+ foreach ($configs AS $config) {
|
|
|
+ if (isset($config['entity-managers'])) {
|
|
|
+ $config['entity_managers'] = $config['entity-managers'];
|
|
|
+ }
|
|
|
+
|
|
|
+ $entityManagers = array();
|
|
|
+ if (isset($config['entity_managers'])) {
|
|
|
+ $configEntityManagers = $config['entity_managers'];
|
|
|
+ if (isset($config['entity_managers']['entity-manager'])) {
|
|
|
+ $config['entity_managers']['entity_manager'] = $config['entity_managers']['entity-manager'];
|
|
|
+ }
|
|
|
+ if (isset($config['entity_managers']['entity_manager']) && isset($config['entity_managers']['entity_manager'][0])) {
|
|
|
+ $configEntityManagers = $config['entity_managers']['entity_manager'];
|
|
|
+ }
|
|
|
+
|
|
|
+ foreach ($configEntityManagers as $name => $entityManager) {
|
|
|
+ $name = isset($entityManager['name']) ? $entityManager['name'] : $name;
|
|
|
+ $entityManagers[$name] = $entityManager;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ $entityManagers = array($mergedConfig['default_entity_manager'] => $config);
|
|
|
+ }
|
|
|
+
|
|
|
+ foreach ($entityManagers AS $name => $managerConfig) {
|
|
|
+ if (!isset($mergedConfig['entity_managers'][$name])) {
|
|
|
+ $mergedConfig['entity_managers'][$name] = $defaultManagerOptions;
|
|
|
+ }
|
|
|
+
|
|
|
+ foreach ($managerConfig AS $k => $v) {
|
|
|
+ if (isset($supportedEntityManagerOptions[$k])) {
|
|
|
+ $k = $supportedEntityManagerOptions[$k];
|
|
|
+ $mergedConfig['entity_managers'][$name][$k] = $v;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $mergedConfig['entity_managers'][$name]['name'] = $name;
|
|
|
+
|
|
|
+ if (isset($managerConfig['mappings'])) {
|
|
|
+ foreach ($managerConfig['mappings'] AS $mappingName => $mappingConfig) {
|
|
|
+ if (!isset($mergedConfig['entity_managers'][$name]['mappings'][$mappingName])) {
|
|
|
+ $mergedConfig['entity_managers'][$name]['mappings'][$mappingName] = array();
|
|
|
+ }
|
|
|
+
|
|
|
+ if (is_array($mappingConfig)) {
|
|
|
+ foreach ($mappingConfig AS $k => $v) {
|
|
|
+ $mergedConfig['entity_managers'][$name]['mappings'][$mappingName][$k] = $v;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
+ return $mergedConfig;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -286,23 +344,18 @@ class DoctrineExtension extends AbstractDoctrineExtension
|
|
|
* There are two possible runtime scenarios:
|
|
|
*
|
|
|
* 1. If the EntityManager was defined before, override only the new calls to Doctrine\ORM\Configuration
|
|
|
- * 2. If the EntityManager was not defined before, gather all the defaults for not specified options and set all the information.
|
|
|
+ * 2. If the EntityManager was not defined beforeefore, gather all the defaults for not specified options and set all the information.
|
|
|
*
|
|
|
* @param array $entityManager A configured ORM entity manager.
|
|
|
* @param ContainerBuilder $container A ContainerBuilder instance
|
|
|
*/
|
|
|
protected function loadOrmEntityManager(array $entityManager, ContainerBuilder $container)
|
|
|
{
|
|
|
- $defaultEntityManager = $container->getParameter('doctrine.orm.default_entity_manager');
|
|
|
$configServiceName = sprintf('doctrine.orm.%s_configuration', $entityManager['name']);
|
|
|
|
|
|
- if ($container->hasDefinition($configServiceName)) {
|
|
|
- $ormConfigDef = $container->getDefinition($configServiceName);
|
|
|
- } else {
|
|
|
- $ormConfigDef = new Definition('Doctrine\ORM\Configuration');
|
|
|
- $ormConfigDef->setPublic(false);
|
|
|
- $container->setDefinition($configServiceName, $ormConfigDef);
|
|
|
- }
|
|
|
+ $ormConfigDef = new Definition('Doctrine\ORM\Configuration');
|
|
|
+ $ormConfigDef->setPublic(false);
|
|
|
+ $container->setDefinition($configServiceName, $ormConfigDef);
|
|
|
|
|
|
$this->loadOrmEntityManagerMappingInformation($entityManager, $ormConfigDef, $container);
|
|
|
$this->loadOrmCacheDrivers($entityManager, $container);
|
|
@@ -312,76 +365,31 @@ class DoctrineExtension extends AbstractDoctrineExtension
|
|
|
'setQueryCacheImpl' => new Reference(sprintf('doctrine.orm.%s_query_cache', $entityManager['name'])),
|
|
|
'setResultCacheImpl' => new Reference(sprintf('doctrine.orm.%s_result_cache', $entityManager['name'])),
|
|
|
'setMetadataDriverImpl' => new Reference('doctrine.orm.'.$entityManager['name'].'_metadata_driver'),
|
|
|
- 'setProxyDir' => $container->getParameter('doctrine.orm.proxy_dir'),
|
|
|
- 'setProxyNamespace' => $container->getParameter('doctrine.orm.proxy_namespace'),
|
|
|
- 'setAutoGenerateProxyClasses' => $container->getParameter('doctrine.orm.auto_generate_proxy_classes'),
|
|
|
- 'setClassMetadataFactoryName' => $container->getParameter('doctrine.orm.class_metadata_factory_name'),
|
|
|
+ 'setProxyDir' => $entityManager['proxy_dir'],
|
|
|
+ 'setProxyNamespace' => $entityManager['proxy_namespace'],
|
|
|
+ 'setAutoGenerateProxyClasses' => $entityManager['auto_generate_proxy_classes'],
|
|
|
+ 'setClassMetadataFactoryName' => $entityManager['class_metadata_factory_name'],
|
|
|
);
|
|
|
foreach ($uniqueMethods as $method => $arg) {
|
|
|
- if ($ormConfigDef->hasMethodCall($method)) {
|
|
|
- $ormConfigDef->removeMethodCall($method);
|
|
|
- }
|
|
|
$ormConfigDef->addMethodCall($method, array($arg));
|
|
|
}
|
|
|
|
|
|
$entityManagerService = sprintf('doctrine.orm.%s_entity_manager', $entityManager['name']);
|
|
|
+ $connectionName = isset($entityManager['connection']) ? $entityManager['connection'] : $entityManager['name'];
|
|
|
|
|
|
- if (!$container->hasDefinition($entityManagerService) || isset($entityManager['connection'])) {
|
|
|
- $connectionName = isset($entityManager['connection']) ? $entityManager['connection'] : $entityManager['name'];
|
|
|
-
|
|
|
- $ormEmArgs = array(
|
|
|
- new Reference(sprintf('doctrine.dbal.%s_connection', $connectionName)),
|
|
|
- new Reference(sprintf('doctrine.orm.%s_configuration', $entityManager['name']))
|
|
|
- );
|
|
|
- $ormEmDef = new Definition('%doctrine.orm.entity_manager_class%', $ormEmArgs);
|
|
|
- $ormEmDef->setFactoryMethod('create');
|
|
|
- $ormEmDef->addTag('doctrine.orm.entity_manager');
|
|
|
- $container->setDefinition($entityManagerService, $ormEmDef);
|
|
|
-
|
|
|
- if ($entityManager['name'] == $defaultEntityManager) {
|
|
|
- $container->setAlias(
|
|
|
- 'doctrine.orm.entity_manager',
|
|
|
- sprintf('doctrine.orm.%s_entity_manager', $entityManager['name'])
|
|
|
- );
|
|
|
- }
|
|
|
- $container->setAlias(
|
|
|
- sprintf('doctrine.orm.%s_entity_manager.event_manager', $entityManager['name']),
|
|
|
- new Alias(sprintf('doctrine.dbal.%s_connection.event_manager', $connectionName), false)
|
|
|
- );
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * Gets the configured entity managers.
|
|
|
- *
|
|
|
- * @param array $config An array of configuration settings
|
|
|
- * @param ContainerBuilder $container A ContainerBuilder instance
|
|
|
- */
|
|
|
- protected function getOrmEntityManagers(array $config, ContainerBuilder $container)
|
|
|
- {
|
|
|
- $defaultEntityManager = $container->getParameter('doctrine.orm.default_entity_manager');
|
|
|
- $entityManagers = array();
|
|
|
- if (isset($config['entity-managers'])) {
|
|
|
- $config['entity_managers'] = $config['entity-managers'];
|
|
|
- }
|
|
|
-
|
|
|
- if (isset($config['entity_managers'])) {
|
|
|
- $configEntityManagers = $config['entity_managers'];
|
|
|
- if (isset($config['entity_managers']['entity-manager'])) {
|
|
|
- $config['entity_managers']['entity_manager'] = $config['entity_managers']['entity-manager'];
|
|
|
- }
|
|
|
-
|
|
|
- if (isset($config['entity_managers']['entity_manager']) && isset($config['entity_managers']['entity_manager'][0])) {
|
|
|
- // Multiple entity managers
|
|
|
- $configEntityManagers = $config['entity_managers']['entity_manager'];
|
|
|
- }
|
|
|
- foreach ($configEntityManagers as $name => $entityManager) {
|
|
|
- $entityManagers[isset($entityManager['id']) ? $entityManager['id'] : $name] = $entityManager;
|
|
|
- }
|
|
|
- } else {
|
|
|
- $entityManagers = array($defaultEntityManager => $config);
|
|
|
- }
|
|
|
- return $entityManagers;
|
|
|
+ $ormEmArgs = array(
|
|
|
+ new Reference(sprintf('doctrine.dbal.%s_connection', $connectionName)),
|
|
|
+ new Reference(sprintf('doctrine.orm.%s_configuration', $entityManager['name']))
|
|
|
+ );
|
|
|
+ $ormEmDef = new Definition('%doctrine.orm.entity_manager_class%', $ormEmArgs);
|
|
|
+ $ormEmDef->setFactoryMethod('create');
|
|
|
+ $ormEmDef->addTag('doctrine.orm.entity_manager');
|
|
|
+ $container->setDefinition($entityManagerService, $ormEmDef);
|
|
|
+
|
|
|
+ $container->setAlias(
|
|
|
+ sprintf('doctrine.orm.%s_entity_manager.event_manager', $entityManager['name']),
|
|
|
+ new Alias(sprintf('doctrine.dbal.%s_connection.event_manager', $connectionName), false)
|
|
|
+ );
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -424,17 +432,7 @@ class DoctrineExtension extends AbstractDoctrineExtension
|
|
|
|
|
|
$this->loadMappingInformation($entityManager, $container);
|
|
|
$this->registerMappingDrivers($entityManager, $container);
|
|
|
-
|
|
|
- if ($ormConfigDef->hasMethodCall('setEntityNamespaces')) {
|
|
|
- // TODO: Can we make a method out of it on Definition? replaceMethodArguments() or something.
|
|
|
- $calls = $ormConfigDef->getMethodCalls();
|
|
|
- foreach ($calls AS $call) {
|
|
|
- if ($call[0] == 'setEntityNamespaces') {
|
|
|
- $this->aliasMap = array_merge($call[1][0], $this->aliasMap);
|
|
|
- }
|
|
|
- }
|
|
|
- $method = $ormConfigDef->removeMethodCall('setEntityNamespaces');
|
|
|
- }
|
|
|
+
|
|
|
$ormConfigDef->addMethodCall('setEntityNamespaces', array($this->aliasMap));
|
|
|
}
|
|
|
|
|
@@ -461,60 +459,25 @@ class DoctrineExtension extends AbstractDoctrineExtension
|
|
|
*/
|
|
|
protected function loadOrmCacheDrivers(array $entityManager, ContainerBuilder $container)
|
|
|
{
|
|
|
- $this->loadOrmEntityManagerMetadataCacheDriver($entityManager, $container);
|
|
|
- $this->loadOrmEntityManagerQueryCacheDriver($entityManager, $container);
|
|
|
- $this->loadOrmEntityManagerResultCacheDriver($entityManager, $container);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * Loads a configured entity managers metadata cache driver.
|
|
|
- *
|
|
|
- * @param array $entityManager A configured ORM entity manager.
|
|
|
- * @param ContainerBuilder $container A ContainerBuilder instance
|
|
|
- */
|
|
|
- protected function loadOrmEntityManagerMetadataCacheDriver(array $entityManager, ContainerBuilder $container)
|
|
|
- {
|
|
|
- $metadataCacheDriverService = sprintf('doctrine.orm.%s_metadata_cache', $entityManager['name']);
|
|
|
- if (!$container->hasDefinition($metadataCacheDriverService) || isset($entityManager['metadata-cache-driver']) || (isset($entityManager['metadata_cache_driver']))) {
|
|
|
- $cacheDriver = $container->getParameter('doctrine.orm.metadata_cache_driver');
|
|
|
- $cacheDriver = isset($entityManager['metadata-cache-driver']) ? $entityManager['metadata-cache-driver'] : (isset($entityManager['metadata_cache_driver']) ? $entityManager['metadata_cache_driver'] : $cacheDriver);
|
|
|
- $cacheDef = $this->getEntityManagerCacheDefinition($entityManager, $cacheDriver, $container);
|
|
|
- $container->setDefinition($metadataCacheDriverService, $cacheDef);
|
|
|
- }
|
|
|
+ $this->loadOrmEntityManagerCacheDriver($entityManager, $container, 'metadata_cache');
|
|
|
+ $this->loadOrmEntityManagerCacheDriver($entityManager, $container, 'result_cache');
|
|
|
+ $this->loadOrmEntityManagerCacheDriver($entityManager, $container, 'query_cache');
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * Loads a configured entity managers query cache driver.
|
|
|
+ * Loads a configured entity managers metadata, query or result cache driver.
|
|
|
*
|
|
|
* @param array $entityManager A configured ORM entity manager.
|
|
|
* @param ContainerBuilder $container A ContainerBuilder instance
|
|
|
+ * @param string $cacheName
|
|
|
*/
|
|
|
- protected function loadOrmEntityManagerQueryCacheDriver(array $entityManager, ContainerBuilder $container)
|
|
|
+ protected function loadOrmEntityManagerCacheDriver(array $entityManager, ContainerBuilder $container, $cacheName)
|
|
|
{
|
|
|
- $queryCacheDriverService = sprintf('doctrine.orm.%s_query_cache', $entityManager['name']);
|
|
|
- if (!$container->hasDefinition($queryCacheDriverService) || isset($entityManager['query-cache-driver']) || isset($entityManager['query_cache_driver'])) {
|
|
|
- $cacheDriver = $container->getParameter('doctrine.orm.query_cache_driver');
|
|
|
- $cacheDriver = isset($entityManager['query-cache-driver']) ? $entityManager['query-cache-driver'] : (isset($entityManager['query_cache_driver']) ? $entityManager['query_cache_driver'] : $cacheDriver);
|
|
|
- $cacheDef = $this->getEntityManagerCacheDefinition($entityManager, $cacheDriver, $container);
|
|
|
- $container->setDefinition($queryCacheDriverService, $cacheDef);
|
|
|
- }
|
|
|
- }
|
|
|
+ $cacheDriverService = sprintf('doctrine.orm.%s_%s', $entityManager['name'], $cacheName);
|
|
|
|
|
|
- /**
|
|
|
- * Loads a configured entity managers result cache driver.
|
|
|
- *
|
|
|
- * @param array $entityManager A configured ORM entity manager.
|
|
|
- * @param ContainerBuilder $container A ContainerBuilder instance
|
|
|
- */
|
|
|
- protected function loadOrmEntityManagerResultCacheDriver(array $entityManager, ContainerBuilder $container)
|
|
|
- {
|
|
|
- $resultCacheDriverService = sprintf('doctrine.orm.%s_result_cache', $entityManager['name']);
|
|
|
- if (!$container->hasDefinition($resultCacheDriverService) || isset($entityManager['result-cache-driver']) || isset($entityManager['result_cache_driver'])) {
|
|
|
- $cacheDriver = $container->getParameter('doctrine.orm.result_cache_driver');
|
|
|
- $cacheDriver = isset($entityManager['result-cache-driver']) ? $entityManager['result-cache-driver'] : (isset($entityManager['result_cache_driver']) ? $entityManager['result_cache_driver'] : $cacheDriver);
|
|
|
- $cacheDef = $this->getEntityManagerCacheDefinition($entityManager, $cacheDriver, $container);
|
|
|
- $container->setDefinition($resultCacheDriverService, $cacheDef);
|
|
|
- }
|
|
|
+ $driver = $cacheName."_driver";
|
|
|
+ $cacheDef = $this->getEntityManagerCacheDefinition($entityManager, $entityManager[$driver], $container);
|
|
|
+ $container->setDefinition($cacheDriverService, $cacheDef);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -529,20 +492,18 @@ class DoctrineExtension extends AbstractDoctrineExtension
|
|
|
{
|
|
|
$type = is_array($cacheDriver) && isset($cacheDriver['type']) ? $cacheDriver['type'] : $cacheDriver;
|
|
|
if ('memcache' === $type) {
|
|
|
- $memcacheClass = isset($cacheDriver['class']) ? $cacheDriver['class'] : '%'.sprintf('doctrine.orm.cache.%s_class', $type).'%';
|
|
|
- $cacheDef = new Definition($memcacheClass);
|
|
|
- $cacheDef->setPublic(false);
|
|
|
- $memcacheHost = is_array($cacheDriver) && isset($cacheDriver['host']) ? $cacheDriver['host'] : '%doctrine.orm.cache.memcache_host%';
|
|
|
- $memcachePort = is_array($cacheDriver) && isset($cacheDriver['port']) ? $cacheDriver['port'] : '%doctrine.orm.cache.memcache_port%';
|
|
|
- $memcacheInstanceClass = is_array($cacheDriver) && isset($cacheDriver['instance-class']) ? $cacheDriver['instance-class'] : (is_array($cacheDriver) && isset($cacheDriver['instance_class']) ? $cacheDriver['instance_class'] : '%doctrine.orm.cache.memcache_instance_class%');
|
|
|
- $memcacheInstance = new Definition($memcacheInstanceClass);
|
|
|
- $memcacheInstance->addMethodCall('connect', array($memcacheHost, $memcachePort));
|
|
|
+ $cacheDef = new Definition('%doctrine.orm.cache.memcache_class%');
|
|
|
+ $memcacheInstance = new Definition('%doctrine.orm.cache.memcache_instance_class%');
|
|
|
+ $memcacheInstance->addMethodCall('connect', array(
|
|
|
+ '%doctrine.orm.cache.memcache_host%', '%doctrine.orm.cache.memcache_port%'
|
|
|
+ ));
|
|
|
$container->setDefinition(sprintf('doctrine.orm.%s_memcache_instance', $entityManager['name']), $memcacheInstance);
|
|
|
$cacheDef->addMethodCall('setMemcache', array(new Reference(sprintf('doctrine.orm.%s_memcache_instance', $entityManager['name']))));
|
|
|
- } else {
|
|
|
+ } else if (in_array($type, array('apc', 'array', 'xcache'))) {
|
|
|
$cacheDef = new Definition('%'.sprintf('doctrine.orm.cache.%s_class', $type).'%');
|
|
|
- $cacheDef->setPublic(false);
|
|
|
}
|
|
|
+ $cacheDef->setPublic(false);
|
|
|
+ $cacheDef->addMethodCall('setNamespace', array('sf2orm_'.$entityManager['name']));
|
|
|
return $cacheDef;
|
|
|
}
|
|
|
|