【问题标题】:symfony 2 define doctrine connection per bundlesymfony 2 定义每个包的教义连接
【发布时间】:2013-08-05 10:17:05
【问题描述】:

我有一个 SaaS Symfony2 项目,其中包含许多捆绑包和一个在 config.yml 中定义的全局数据库连接。 现在让我们说,一个特定的客户想要一些自定义功能。因为我希望它与我的主项目集成,所以我决定使用该客户端的特定代码创建一个新包。该捆绑包可能需要一些新的数据库表,但因为它们是特定于该客户端的,所以我用它们创建了一个新数据库。

然后我需要定义一个新的学说连接。与其将所有连接设置放在主 config.yml 中(如果我有 10 个带有特定捆绑包的客户端,这可能会变得非常混乱),有什么方法可以在客户端捆绑包内的某个配置文件中定义它?这样我就可以轻松地将所有客户端代码和配置封装在包中

我认为可能使用依赖注入组件并使用编译器通行证根据捆绑包中定义的某些参数文件创建新的数据库连接,但我不知道该怎么做。我还需要定义一些与连接(Doctrine Extensions)相关的监听器,这使得任务更加困难。

我想我在每个请求中只有一个“客户端包”处于活动状态,所以也许我可以定义一些“客户端”连接,然后在运行时更改连接字符串? (在这种情况下,我需要确保只加载正确的客户端包,基于子域或其他东西)。

感谢您的帮助。

【问题讨论】:

  • 你最后解决了这个问题吗?你能指导一下你是怎么做到的吗?

标签: symfony doctrine-orm database-connection bundle


【解决方案1】:

您可以从 /vendor/doctrine-bundle/Doctrine/Bundle/DoctrineBundle/DependencyInjection/ 中的 DoctrineExtension.php 开始

它包含两个方法 loadDbalConnection() 和 loadOrmEntityManager() 加载配置值并构建 Connection 和 Mappings 对象。 你可以从那个类中复制你需要的代码。

【讨论】:

    【解决方案2】:

    查看 \src\Acme\DemoBundle\DependencyInjection\AcmeDemoExtension.php 和文件夹 \src\Acme\DemoBundle\Resources\config* 使用它,您可以加载 yml 或 xml 文件并设置数据库连接和映射你需要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-17
      • 1970-01-01
      • 2011-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多