protected function loadDocumentManager(array $documentManager, 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');
$proxyCacheDir = $container->getParameter('kernel.cache_dir').'/doctrine/odm/mongodb/Proxies';
$odmConfigDef = new Definition('%doctrine.odm.mongodb.configuration_class%');
$container->setDefinition(sprintf('doctrine.odm.mongodb.%s_configuration', $documentManager['name']), $odmConfigDef);
$this->loadDocumentManagerBundlesMappingInformation($documentManager, $odmConfigDef, $container);
$this->loadDocumentManagerMetadataCacheDriver($documentManager, $container);
$methods = array(
'setMetadataCacheImpl' => new Reference(sprintf('doctrine.odm.mongodb.%s_metadata_cache', $documentManager['name'])),
'setMetadataDriverImpl' => new Reference('doctrine.odm.mongodb.metadata'),
'setProxyDir' => $proxyCacheDir,
'setProxyNamespace' => $container->getParameter('doctrine.odm.mongodb.proxy_namespace'),
'setAutoGenerateProxyClasses' => $container->getParameter('doctrine.odm.mongodb.auto_generate_proxy_classes'),
'setDefaultDB' => $defaultDatabase,
'setLoggerCallable' => array(new Reference('doctrine.odm.mongodb.logger'), 'logQuery'),
);
foreach ($methods as $method => $arg) {
$odmConfigDef->addMethodCall($method, array($arg));
}
// event manager
$eventManagerName = isset($documentManager['event_manager']) ? $documentManager['event_manager'] : $documentManager['name'];
$eventManagerId = sprintf('doctrine.odm.mongodb.%s_event_manager', $eventManagerName);
if (!$container->hasDefinition($eventManagerId)) {
$eventManagerDef = new Definition('%doctrine.odm.mongodb.event_manager_class%');
$eventManagerDef->addMethodCall('loadTaggedEventListeners', array(
new Reference('service_container'),
));
$eventManagerDef->addMethodCall('loadTaggedEventListeners', array(
new Reference('service_container'),
sprintf('doctrine.odm.mongodb.%s_event_listener', $eventManagerName),
));
$eventManagerDef->addMethodCall('loadTaggedEventSubscribers', array(
new Reference('service_container'),
));
$eventManagerDef->addMethodCall('loadTaggedEventSubscribers', array(
new Reference('service_container'),
sprintf('doctrine.odm.mongodb.%s_event_subscriber', $eventManagerName),
));
$container->setDefinition($eventManagerId, $eventManagerDef);
}
$odmDmArgs = array(
new Reference(sprintf('doctrine.odm.mongodb.%s_connection', isset($documentManager['connection']) ? $documentManager['connection'] : $documentManager['name'])),
new Reference(sprintf('doctrine.odm.mongodb.%s_configuration', $documentManager['name'])),
new Reference($eventManagerId),
);
$odmDmDef = new Definition('%doctrine.odm.mongodb.document_manager_class%', $odmDmArgs);
$odmDmDef->setFactoryMethod('create');
$container->setDefinition(sprintf('doctrine.odm.mongodb.%s_document_manager', $documentManager['name']), $odmDmDef);
if ($documentManager['name'] == $defaultDocumentManager) {
$container->setAlias(
'doctrine.odm.mongodb.document_manager',
sprintf('doctrine.odm.mongodb.%s_document_manager', $documentManager['name'])
);
}
}