ZF2 Skeleton和Doctrine ORM xml schema合并

3
我正在使用Doctrine Module作为Zend Framework 2中ORM功能的插件。 我正在尝试基于Zend Skeletton Application构建模块化架构,使得可以在模块B中覆盖和扩展来自模块A的功能。 我还需要通过插入新模块来扩展实体。
现在我的问题是,在模块A中,实体的xml模式非常静态。没有办法用模块B来覆盖它。 我想实现一个服务,告诉doctrine模块在哪里找到特定实体要使用的xml模式,但这并不足够。
例如,当模块B扩展模块A,而模块C也扩展模块A时,应该使用哪个xml模式-来自模块B还是来自模块C? 因此,我想从两个或多个模式文件(一个在模块B中,另一个在模块C中)动态构建xml模式。
实现这种架构的最佳方法是什么?编写一个可以从所有模块调用以收集所有xml模式文件的服务是否是一个好的方法? 如何告诉Doctrine合并这些文件?除了在配置文件中修改Doctrine Module之外,有没有更好的方法?

1
您是否考虑过定义自定义映射驱动程序? - Ocramius
你是在说这样的吗:NewsItem(id,title,text),YouTubeItem(id,title,text,youtubelink),DownloadItem(id,title,text,dllink),CarItem(id,title,text,horsepower,topspeed)?我有这样的一个用例,我使用了DiscriminatorMapping来实现它。 - Sam
嗨Ocramuis!是的,我也在想类似的事情。 我不确定这是否是应该这样做的方式。那么你认为教我的自定义映射驱动程序合并xml文件是可能的吗? 使用服务收集多个模块的xml模式是正确的方法吗? - ibo_s
嗨,山姆!不是那个我需要的。我想你是在说表继承。所以你正在编写一个新实体,它扩展了第一个实体,但我想要的是扩展完全相同的实体并添加更多字段。例如: 模块A定义了实体“学生”。学生具有id、matriculationNo、name和age。还有与“大学”相关的关联。 现在,模块B通过添加名为“地址”的关联到“学生”实体来扩展应用程序的功能。该模块称为“地址管理”。 - ibo_s
1
如果你的映射逻辑是动态的,那么是的。问题在于映射被缓存了,所以要么禁用缓存(性能差),要么保持启用(无法可靠地在运行时更改映射)。 - Ocramius
显示剩余3条评论
1个回答

0

@ibo_s 这里没有什么好运气。尝试编写适配器,但那太复杂了,我很快就卡住了。最后,我只是复制了一些实体 dcm.xml,并使用配置覆盖来指向正确的实体。所以放弃了扩展实体。


看起来我们正在尝试错误的方法 :-) 如果您在解决这个问题时发现了什么,请让我知道最新情况。 实体-属性-值可能是一种解决方案,但我认为它有点不太优雅,而且我认为它在使用Doctrine的项目中并不适用。 - ibo_s

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接