Symfony\Bundle\DoctrineMongoDBBundle\DependencyInjection\DoctrineMongoDBExtension::loadDocumentManager PHP Method

loadDocumentManager() protected method

Loads a document manager configuration.
protected loadDocumentManager ( array $documentManager, ContainerBuilder $container )
$documentManager array A document manager configuration array
$container Symfony\Component\DependencyInjection\ContainerBuilder A ContainerBuilder instance
    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'])
            );
        }
    }