ZF2 Skeleton 和 Doctrine ORM xml 模式合并

Posted

技术标签:

【中文标题】ZF2 Skeleton 和 Doctrine ORM xml 模式合并【英文标题】:ZF2 Skeleton and Doctrine ORM xml schema merge 【发布时间】:2013-03-25 02:22:17 【问题描述】:

我在 Zend Framework 2 中使用 Doctrine Module 来实现 ORM 功能。 我正在尝试构建一个基于 Zend Skeleton Application 的模块化架构,它可以覆盖和扩展模块 B 中模块 A 的功能。 我还必须通过新模块中的插件来扩展实体。

现在我的问题是实体的 xml 模式在模块 A 中是非常静态的。不可能用模块 B 覆盖它。 我想实现一个服务,告诉学说模块在哪里可以找到用于特定实体的 xml 模式,但这还不够。

例如,当模块 B 扩展模块 A 但模块 C 也扩展模块 A - 使用哪个 xml 架构 - 来自模块 B 或来自模块 C? 所以我想从两个或多个模式文件中动态构建 xml 模式 - 一个在模块 B 中,一个在模块 C 中。

实现这种架构的最佳方式是什么?编写可以从所有模块调用以收集所有 xml 模式文件的服务是否是一种好方法? 如何告诉 Doctrine 合并这些文件?有没有比接触 Doctrine Module 更好的方法 - 例如在配置文件中?

【问题讨论】:

您是否已经考虑定义自定义映射驱动程序? 你是这样说的吗: NewsItem (id,title,text) YouTubeItem (id,title,text,youtubelink) DownloadItem (id,title,text,dlllink) CarItem (id,title,text ,马力,最高速度)?我有这样一个用例,我使用 DiscriminatorMapping 来实现这一点。 嗨奥克拉穆斯!是的,类似的事情让我想到了。我不确定这是否应该这样做。所以你认为有可能教我的自定义映射驱动程序合并 xml 文件吗?使用服务从多个模块收集 xml 模式是否正确? 嗨,山姆!不,那不是我需要的。我认为您在谈论表继承。所以你正在编写一个扩展第一个实体的新实体,但我想要的是用更多字段扩展完全相同的实体。示例:模块 A 定义实体“学生”。学生有 id、matriculationNo、name、age。并与“大学”建立联系。现在模块 B 为应用程序扩展了更多功能,并向“学生”实体添加了一个名为“地址”的关联。该模块称为“地址管理”。 @user2205964 如果您的映射逻辑是动态的,是的。问题是映射被缓存了,所以要么禁用缓存(性能差)要么保持启用(不能在运行时可靠地更改映射) 【参考方案1】:

@ibo_s 运气不好。试图写一个适配器,但那样复杂,我很快就卡在那里了。最后,我只是复制了一些实体 dcm.xml 并使用配置覆盖来指向正确的实体。所以放弃了扩展实体。

【讨论】:

所以这似乎是我们正在尝试的错误方法 :-) 如果您发现有关此问题的任何信息,请保持我的最新状态。 Entity-Attribute-Value 可能是一个解决方案,但在我看来它有点脏,而且我认为它在使用学说的项目中并不顺利。

以上是关于ZF2 Skeleton 和 Doctrine ORM xml 模式合并的主要内容,如果未能解决你的问题,请参考以下文章

要处理的zf2 + doctrine2和No Metadata类

带有 ZF2 的 Doctrine 2 如何更新行

ZF2 - Doctrine ORM,简单表连接

ZF2 Doctrine Form 注解类型选择

zf2 doctrine2如何在实体列中使用tinyint数据类型

ZF2 + Composer + Jelastic 中的教义