【问题标题】:Extending bundles from the outside in Symfony / Doctrine 2?在 Symfony / Doctrine 2 中从外部扩展包?
【发布时间】:2016-09-20 13:31:17
【问题描述】:

据我所知,如果您想从另一个包中扩展一个包,而不在它们之间创建依赖关系或使用任何 OO 继承概念,那么使用 Symfony 和 Doctrine2 尚无法实现。这证实了我的第一个想法:

“由于 Doctrine 的工作方式,无法覆盖捆绑包的实体映射。” (来源:http://symfony.com/doc/current/bundles/override.html#entities-entity-mapping

现有的唯一方法并没有让我满意:使用 SuperMappedClasses...

我想要的是,例如:

  1. 一只手拥有独立捆绑包中的联系人 (CRMBundle)
  2. 在另一个 (EmailBundle) 中的另一个独立包中包含 EmailMessages
  3. 在 ShowMapper 中“神奇地”添加 Contact::$emailMessages 属性 + getter/setter + twig 模板(如果我使用 Sonata,这不是强制性的)+ DatagridMapper/FormMapper 中的字段...当 EmailBundle与联系人/CRMBundle 同时存在于应用程序中。
  4. 反面也一样(电子邮件)

目前,正如 Symfony 官方文档所说,这似乎是不可能的。 任何人都可以在这一点上确认“最先进的技术”吗?

事实上,我们正在处理这个问题,我认为我们将在这一点上为每个人带来一些新的和有趣的东西......但我不希望我们在没有必要的情况下处理这个问题。

提前致谢,

【问题讨论】:

    标签: doctrine-orm bundle symfony extend


    【解决方案1】:

    基本上,您想创建一些“动态”属性。没有办法做到这一点。 IMO,EmailMessages 和 Contact 是独立的实体,然后它们位于 2 个不同的捆绑包中并且彼此不认识(您仍然可以使用电子邮件地址作为从一个到另一个查询的键),它们要么是并且是一部分相同的“聚合”。

    【讨论】:

    • 感谢您的回答...我很确定我们可以找到一种方法来完成看似不可能的事情。我们将继续努力,做一些事情,然后如果我们成功了,为社区写一些东西并(如果可能的话)发布一些代码。
    • IMO 问题不是技术问题——当然有办法——而是关于模型化。要么你有一个模型,要么有另一个模型,但有一些动态/魔法听起来并不好。
    • 为什么听起来不好?从其捆绑包外部访问实体的定义以动态扩展它非常有用......它将提供“Easy Extend Pattern”,允许设计可扩展、通用且同时独立的东西。
    • 我刚刚在 Doctrine 的 Github 存储库中打开了一个问题:github.com/doctrine/doctrine2/issues/6049
    猜你喜欢
    • 2017-02-06
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-23
    • 1970-01-01
    相关资源
    最近更新 更多