我可以在Bundle配置中定义新的连接/实体管理器吗?

时间:2012-06-01 15:00:03

标签: symfony doctrine-orm

我正在尝试定义一个Bundle,它有助于索引sqlite fts表中的一些数据(来自实体),以便进行一些全文搜索。

我知道我可以使用app配置文件定义备用连接和实体管理器(如食谱中所示),但我想知道是否可以在捆绑配置中执行此操作 - 通过定义,例如,注入了doctrine服务的服务,以便它可以实例化新连接。

Sqlite不是强制性的,它可以是任何数据库类型(由学说支持)。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

我建议查看FOSUserBundle它们如何处理多个持久层(ORM,Couch,MongoDB)。你基本上会做同样的事情。这只是加载不同配置的问题,具体取决于app / config / config.yml中指定的驱动程序。

答案 1 :(得分:0)

据我所知,这是不可能的。此外,数据库连接应该在app / config.yml中集中管理。

我建议在那里定义连接,并在你的bundle中添加一个配置选项,你可以在其中指定用于索引的东西的连接。

# app/config.yml
doctrine:
    dbal:
        default_connection:   default
        connections:
            default:
                dbname:               database
                host:                 localhost
                user:                 user
                password:             secret
                driver:               pdo_mysql
            my_data_index:
                dbname:               database
                driver:               pdo_sqlite

# configuration option of you bundle
acme_indexer:
    connection: my_data_index

然后在您的软件包中,您可以阅读此配置选项并获取连接/实体管理器并将其注入索引服务。

修改

您可以确保在捆绑包中以编程方式创建自定义连接

$params =   array(
    'driver'    =>'pdo_sqlite',
    ....
);

$factory = $container->get('doctrine.dbal.connection_factory')
$connection = $factory->createConnection($params);

但正如我之前所说,这是不好的做法,因为你会逃避定义数据库连接的symfony标准方法。