Symfony2/Doctrine与客户特定数据库

Symfony2/Doctrine与客户特定数据库,symfony,doctrine-orm,Symfony,Doctrine Orm,我正在编写一个web应用程序,它将为每个客户机提供自己的数据库(或模式,因为我使用的是PostgreSQL)和子域。所以我想要的基本上是: =>使用数据库/模式 =>使用数据库/模式 等等 当然,我不打算盲目地抛出URL参数,所以在检查了一些有效性之后——考虑到我的所有代码、模式等对于所有客户机都是相同的,并且要连接的数据库是唯一的区别——有没有一种方法可以做到这一点,而不必一直更新任何主配置文件 我环顾四周一段时间,发现了一些不适用于我的场景的解决方案,因为它们要么假设不同的捆绑包使用不同

我正在编写一个web应用程序,它将为每个客户机提供自己的数据库(或模式,因为我使用的是PostgreSQL)和子域。所以我想要的基本上是:

  • =>使用数据库/模式
  • =>使用数据库/模式
  • 等等
当然,我不打算盲目地抛出URL参数,所以在检查了一些有效性之后——考虑到我的所有代码、模式等对于所有客户机都是相同的,并且要连接的数据库是唯一的区别——有没有一种方法可以做到这一点,而不必一直更新任何主配置文件


我环顾四周一段时间,发现了一些不适用于我的场景的解决方案,因为它们要么假设不同的捆绑包使用不同的数据库(我有一个捆绑包使用不同的数据库,具体取决于客户机),要么您只需配置几个不同的实体管理器(我有许多客户机,而不仅仅是5个或10个).

您可以在导入中包含一个php文件,如

imports:
        ...
    - { resource: parameters.php }
        ....
然后在该页面中,使用任何方法获取子域并处理它,然后设置db变量,如

<?php
require_once('a_file_that_generates_these_parameters.php')

$container->setParameter('database_host', $dbHost);
$container->setParameter('database_port', $dbPort);
$container->setParameter('database_name', $dbName);
$container->setParameter('database_user', $dbUser);
$container->setParameter('database_password', $dbPass);

谢谢这是一种方法,但我认为它与Symfony的其他部分不太一致。我发现并改编了另一个解决方案,贴在这里:如果有人有更好的,我仍然非常感兴趣。是的,它不是很漂亮,而且感觉很粗糙。
# Doctrine Configuration
doctrine:
    dbal:
        driver:   %database_driver%
        host:     %database_host%
        port:     %database_port%
        dbname:   %database_name%
        user:     %database_user%
        password: %database_password%
        ....