Symfony2 + DoctrineMongoDBBundle配置

时间:2011-03-02 00:27:39

标签: mongodb symfony doctrine-orm

我试图以这种方式将Symfony 2与MongoDB连接起来:

  1. AppKernel::registerBundles中注册 DoctrineMongoDBBundle 方法
  2. 设置“doctrine_mongo_db”配置(请参阅下面的config.yml
  3. 从容器中获取“doctrine.odm.mongodb.document_managerHelloController行动
  4. 当我尝试运行应用程序时,会抛出 MongoConnectionException

    任何人都可以帮我解决这个问题吗?


    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:root@192.168.0.111: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');
    

    例外(第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.    }
    

1 个答案:

答案 0 :(得分:1)

问题在于DoctrineMongoDBBundle配置加载。修复程序(https://github.com/fabpot/symfony/pull/740)应尽快合并。

现在您可以使用下面的固定方法。

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

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