在Symonfy

时间:2015-09-28 11:07:03

标签: php database symfony config entitymanager

我需要在运行时从数据库中的表中加载Symfony2中的数据库和实体配置。 默认情况下,Symfony数据库配置存储在config.yml中。实体的表名称在@ORM注释中定义。 但是我的一些实体可以动态存储在任何具有任何表名的数据库中,并且事先没有定义(表模式除外),因此我无法在config中存储数据库配置。 我想在config.yml中设置默认数据库配置。该数据库将存储三个表:

  1. 包含与数据库的连接(database_connection_id,主机,端口,用户,密码,dbname)
  2. 包含关系(entity_name,table_name)
  3. 包含关系(table_name,database_connection_id)
  4. 我需要在使用EntityManager或EntityRepository向实体发出请求之前在Web请求中动态加载此配置。换句话说,在处理Controller中的Web请求之前,我想处理此配置,为每个实体设置table_name和连接。然后通常使用透明的实体。

    据我所知,我需要实现像Symfony ConfigLoader这样的东西,但是在处理配置时没有数据库连接。可以使用类元数据设置实体的表名,但我不确定这是正确的决定。

    可能的方法是为连接生成symfony config.yml,为每个Web请求从数据库生成表名(而不是@ORM注释)的src / * Bundle / Resources / config / doctrine / *。orm.yml(或者在数据库时生成一次)在默认数据库中更改config),清除symfony数据库缓存,然后加载Symfony的内核。但这种方式看起来很难看。 此外,后台任务可能希望与Web请求一起使用实体的其他表。每个实体可以有多个表,后台任务可以生成新表,此时Web请求使用以前版本的表。

    这可以使用标准的symfony灵活组件实现吗?

1 个答案:

答案 0 :(得分:0)

我不认为这是一个可行的想法。由于symfony将配置文件用于生产,并且您希望在运行时为每个请求创建配置,因此性能成本会很高。

如果你想做类似的事情,创建一个控制台命令,创建你的映射和配置文件,让symfony清除并用php app/console clear:cache --env=prod或类似的东西重新创建它的缓存。