2011-03-02 14 views
5

Estoy intentando conectar Symfony 2 con MongoDB de tal manera:Symfony2 + DoctrineMongoDBBundle configuración

  1. Registro DoctrineMongoDBBundle en AppKernel::registerBundles método
  2. Set 'doctrine_mongo_db' configuración (ver más abajo config.yml)
  3. Obtenga 'doctrine.odm.mongodb.document_manager' del contenedor en HelloController acción

Y cuando intento ejecutar la aplicación se lanza MongoConnectionException.

¿Alguien me puede ayudar a resolver este problema?


AppKernel.php

public function registerBundles() 
{ 
     $bundles = array(
      new Symfony\Bundle\FrameworkBundle\FrameworkBundle(), 
      new Symfony\Bundle\TwigBundle\TwigBundle(), 
      new Symfony\Bundle\DoctrineMongoDBBundle\DoctrineMongoDBBundle(), 
      new Sensio\HelloBundle\HelloBundle() 
     ); 

     return $bundles; 
    } 

config.yml

framework: 
    charset:  UTF-8 
    router:  { resource: "%kernel.root_dir%/config/routing.yml" } 
    templating: { engines: ['twig'] } 

## Doctrine Configuration 

doctrine_mongo_db: 
    server: mongodb://root:[email protected]:27017 
    default_database: test 
    options: { connect: true } 
    mappings: 
     HelloBundle: { type: annotation, dir: Document } 

# Twig Configuration 

twig: 
    debug:   %kernel.debug% 
    strict_variables: %kernel.debug% 

HelloController.php

/* @var $dm \Doctrine\ODM\MongoDB\DocumentManager */ 
$dm = $this->get('doctrine.odm.mongodb.document_manager'); 

Excepción (línea 96)

connecting to failed: Transport endpoint is not connected 

in ~/vendor/doctrine-mongodb/lib/Doctrine/MongoDB/Connection.php line 96 » 

93. if ($this->server) { 
94.  $this->mongo = new \Mongo($this->server, $this->options); 
95. } else { 
96.  $this->mongo = new \Mongo(); 
97. } 
+2

Después de algunas investigaciones he encontrado que es un problema en el método DoctrineMongoDBBundle :: carga. Los $ configs deben fusionarse antes de pasarlos al método DoctrineMongoDBBundle :: doMongodbLoad. Parece un error. –

+2

Sí, tenía razón. Los chicos están reescribiendo ahora la configuración de DoctrineMongoDBBundle. https://github.com/fabpot/symfony/pull/740 –

+3

Creo que deberías publicar esa información como una respuesta y aceptarla;) –

Respuesta

1

El problema está en DoctrineMongoDBBundle carga de la configuración. La solución (https://github.com/fabpot/symfony/pull/740) debería fusionarse pronto.

Por ahora puede usar el método fijo a continuación.

public function load(array $configs, ContainerBuilder $container) 
{ 
    $mergedConfig = array(); 
    foreach ($configs as $config) { 
     $mergedConfig = array_merge_recursive($mergedConfig, $config); 
    } 

    $this->doMongodbLoad($mergedConfig, $container); 
} 
Cuestiones relacionadas