解耦Symfony捆绑并使耦合松散或可配置

时间:2018-03-09 16:28:19

标签: php symfony

我想解决的案例是:

我得到捆绑处理称为'OrderBundle'的订单,并写了额外的处理投诉 - 'ComplaintsBundle' - 捆绑包不是完全独立的 - 实体'投诉'通过'投诉'内的字段'订单'与实体'订单'相结合 - 我认为是 真正的耦合问题 - 由Doctrine注释指向“秩序”。

我正在考虑并希望实现的是编写一个“投诉”包,它可以是独立的,也可以有其他可选字段,可以配置为与不同的实体耦合。例如 - 捆绑“投诉”可以作为任何投诉包 最终需要投诉功能的实体。

我与其他捆绑包有类似的情况。另一个例子是来自UserBundle的'User'实体,它与CompanyBundle中的'Company'实体相关, 但问题是我希望UserBundle是独立的捆绑包,可以很容易地安装在不需要CompanyBundle的不同项目中但是 用户可以附加到另一个实体/实体。它更进一步,因为它不仅仅是关于教义注释,而是视图,创建形式,验证等等 涉及的东西。

我的方法应该是什么?事实上,我对symfony很陌生,以及独立可重用捆绑包的想法对我来说也是一个新的东西 我没有任何捆绑,但整个开发应用程序。另外,我想开发其他与我的工作无关的开源软件包,以便与他人分享 我想我需要向他们申请这种不与其他任何事物联系起来的态度 - 实际上如何实现,你能分享你的经验,想法或指向解释性文章吗?

非常感谢你的指导方针,请注意这是一个合理的问题,因为缺乏在Symfony社区中解耦捆绑的专业知识。

1 个答案:

答案 0 :(得分:1)

在独立的捆绑包中,您应该将您的实体声明为抽象,并在其上设置原则注释@MappedSuperclass

然后,在你的应用程序中,你将不得不创建你的'最终'实体,它将扩展你的包提供的映射超类。

此外,您可能需要在捆绑配置中公开子实体的FQCN。

它看起来有点沉重,但不幸的是,Doctrine映射不能覆盖。

以下是一些实施此解决方案的软件包:

处理你的MappedSuperclass之间的关系你必须在关系注释中使用Interface。这是关于它的official documentation

祝你好运