【发布时间】:2015-09-28 11:07:02
【问题描述】:
我需要在运行时从数据库中的表中加载 Symfony2 中的数据库和实体配置。 默认情况下,Symfony 数据库配置存储在 config.yml 中。实体的表名在 @ORM 注释中定义。 但是我的一些实体可以用任何表名动态存储在任何数据库中,并且事先没有定义(表模式除外),所以我不能在 config.xml 中存储数据库配置。 我想在 config.yml 中设置默认数据库配置。该数据库将存储三个表:
- 包含与数据库的连接(database_connection_id、主机、端口、用户、密码、数据库名称)
- 包含关系(实体名称、表名称)
- 包含关系(table_name、database_connection_id)
在使用 EntityManager 或 EntityRepository 向实体发出请求之前,我需要在 Web 请求中动态加载此配置。换句话说,我想处理这个配置,为每个实体设置 table_name 和连接,然后在 Controller 中处理 Web 请求。然后像往常一样使用透明的实体。
据我了解,我需要实现 Symfony ConfigLoader 之类的东西,但是在处理配置时没有数据库连接。可以使用 Class Metadata 设置实体的表名,但我不确定这是正确的决定。
一种可能的方法是为每个 Web 请求(或一次)从数据库中为连接和 src/*Bundle/Resources/config/doctrine/*.orm.yml 生成表名(而不是 @ORM 注释)生成 symfony config.yml默认数据库中更改数据库配置),清除 symfony 数据库缓存,然后加载 Symfony 内核。但是这种方式看起来很难看。 此外,后台任务可能希望使用实体的其他表而不是 Web 请求。每个实体可以有多个表,后台任务可以生成一个新表,此时web请求使用之前版本的表。
这可以使用标准的 symfony 灵活组件来实现吗?
【问题讨论】:
标签: php database symfony config entitymanager