[DoctrineMongoDBBundle] Refactoring how the document_managers are loaded in the Extension and removing two unneeded DIC parameters.

This commit is contained in:
Ryan Weaver 2011-02-19 11:18:44 -06:00
parent 9ca8f171f7
commit 1e492e231c
2 changed files with 39 additions and 41 deletions

View File

@ -88,7 +88,24 @@ class DoctrineMongoDBExtension extends AbstractDoctrineExtension
// load the connections
$this->loadConnections($config['connections'], $container);
$this->loadDocumentManagers($config, $container);
// if no "document_managers" were given, setup the default manager
if (!isset($config['document_managers']) || !$config['document_managers']) {
$defaultName = $config['default_document_manager'];
$config['document_managers'] = array($defaultName => array(
'mappings' => $config['mappings'],
'default_database' => $config['default_database'],
'metadata_cache_driver' => $config['metadata_cache_driver'],
));
}
// load the document managers
$this->loadDocumentManagers(
$config['document_managers'],
$config['default_document_manager'],
$config['default_database'],
$config['metadata_cache_driver'],
$container
);
$this->loadConstraints($config, $container);
}
@ -101,12 +118,10 @@ class DoctrineMongoDBExtension extends AbstractDoctrineExtension
protected function overrideParameters($options, ContainerBuilder $container)
{
$overrides = array(
'default_document_manager',
'proxy_namespace',
'auto_generate_proxy_classes',
'hydrator_namespace',
'auto_generate_hydrator_classes',
'default_database',
);
foreach ($overrides as $key) {
@ -124,30 +139,39 @@ class DoctrineMongoDBExtension extends AbstractDoctrineExtension
/**
* Loads the document managers configuration.
*
* @param array $config An array of configuration settings
* @param array $dmConfigs An array of document manager configs
* @param string $defaultDM The default document manager name
* @param string $defaultDB The default db name
* @param string $defaultMetadataCache The default metadata cache configuration
* @param ContainerBuilder $container A ContainerBuilder instance
*/
protected function loadDocumentManagers(array $config, ContainerBuilder $container)
protected function loadDocumentManagers(array $dmConfigs, $defaultDM, $defaultDB, $defaultMetadataCache, ContainerBuilder $container)
{
$documentManagers = $this->getDocumentManagers($config, $container);
foreach ($documentManagers as $name => $documentManager) {
foreach ($dmConfigs as $name => $documentManager) {
$documentManager['name'] = $name;
$this->loadDocumentManager($documentManager, $container, $config['metadata_cache_driver']);
$this->loadDocumentManager(
$documentManager,
$defaultDM,
$defaultDB,
$defaultMetadataCache,
$container
);
}
$container->setParameter('doctrine.odm.mongodb.document_managers', array_keys($documentManagers));
$container->setParameter('doctrine.odm.mongodb.document_managers', array_keys($dmConfigs));
}
/**
* Loads a document manager configuration.
*
* @param array $documentManager A document manager configuration array
* @param string $defaultDM The default document manager name
* @param string $defaultDB The default db name
* @param string $defaultMetadataCache The default metadata cache configuration
* @param ContainerBuilder $container A ContainerBuilder instance
* @param array $defaultMetadataCache The default metadata cache configuration array
*/
protected function loadDocumentManager(array $documentManager, ContainerBuilder $container, $defaultMetadataCache)
protected function loadDocumentManager(array $documentManager, $defaultDM, $defaultDB, $defaultMetadataCache, ContainerBuilder $container)
{
$defaultDocumentManager = $container->getParameter('doctrine.odm.mongodb.default_document_manager');
$defaultDatabase = isset($documentManager['default_database']) ? $documentManager['default_database'] : $container->getParameter('doctrine.odm.mongodb.default_database');
$defaultDatabase = isset($documentManager['default_database']) ? $documentManager['default_database'] : $defaultDB;
$configServiceName = sprintf('doctrine.odm.mongodb.%s_configuration', $documentManager['name']);
if ($container->hasDefinition($configServiceName)) {
@ -200,7 +224,7 @@ class DoctrineMongoDBExtension extends AbstractDoctrineExtension
$odmDmDef->addTag('doctrine.odm.mongodb.document_manager');
$container->setDefinition(sprintf('doctrine.odm.mongodb.%s_document_manager', $documentManager['name']), $odmDmDef);
if ($documentManager['name'] == $defaultDocumentManager) {
if ($documentManager['name'] == $defaultDM) {
$container->setAlias(
'doctrine.odm.mongodb.document_manager',
new Alias(sprintf('doctrine.odm.mongodb.%s_document_manager', $documentManager['name']))
@ -212,30 +236,6 @@ class DoctrineMongoDBExtension extends AbstractDoctrineExtension
}
}
/**
* Gets the configured document managers.
*
* @param array $config An array of configuration settings
* @param ContainerBuilder $container A ContainerBuilder instance
*/
protected function getDocumentManagers(array $config, ContainerBuilder $container)
{
$defaultDocumentManager = $container->getParameter('doctrine.odm.mongodb.default_document_manager');
$documentManagers = array();
if (count($config['document_managers'])) {
$configDocumentManagers = $config['document_managers'];
foreach ($configDocumentManagers as $name => $documentManager) {
$documentManagers[isset($documentManager['id']) ? $documentManager['id'] : $name] = $documentManager;
}
} else {
$documentManagers = array($defaultDocumentManager => $config);
}
return $documentManagers;
}
/**
* Loads the configured document manager metadata cache driver.
*

View File

@ -5,8 +5,6 @@
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
<parameters>
<parameter key="doctrine.odm.mongodb.default_document_manager">default</parameter>
<parameter key="doctrine.odm.mongodb.default_database">default</parameter>
<parameter key="doctrine.odm.mongodb.connection_class">Doctrine\MongoDB\Connection</parameter>
<parameter key="doctrine.odm.mongodb.configuration_class">Doctrine\ODM\MongoDB\Configuration</parameter>
<parameter key="doctrine.odm.mongodb.document_manager_class">Doctrine\ODM\MongoDB\DocumentManager</parameter>