【发布时间】:2012-02-15 12:54:36
【问题描述】:
我正在努力弄清楚如何在 Symfony 中实现两个包之间的正确分离,但我遇到了一个教义问题。
我有两个捆绑包,一个更通用的捆绑包(包含抽象类)称为“BaseProduct”,然后是该捆绑包的一个实现(提供了专门化该捆绑包功能的机会)称为“ClientProduct”。
我在“产品”包中有两个关联的实体。
abstract class Product
{
// One product has many attributes
private $attributes;
private function getAttributes()
{
return $this->attributes;
}
}
abstract class Attribute
{
private $name;
private $value;
private function getName()
{
return $this->name;
}
private function getValue()
{
return $this->value;
}
}
然后是具体的实现
class Product extends BaseProduct/Product
{
}
class Attribute extends BaseProduct/Attribute
{
}
我的问题
首先,我会使用“mappedSuperclass”来执行此操作,但是通过阅读文档,您无法将集合设置为非具体类的关联(可以理解)。
我正在尝试另一种方法来做到这一点。
这甚至可能吗?因为我的“基类”与另一个“基类”(都是抽象的)有关系。在那种情况下,我是否需要将关系转移到“具体”实现中,还是可以将它们保持在这个级别(抽象)?我的实体定义('.yml')没有显示,但我打算将它们链接到具体实现(实体之间的关联也在其他具体实现之间),并保留没有实体定义的基类。
欢迎任何输入 - 这里的目标是创建一个可以专门化的解耦包。我确信这是一个非常普遍的目标,所以我很想看看其他人是如何做到的(如果 github 上有任何捆绑包这样做,我很想看看它们)。
【问题讨论】:
标签: inheritance orm symfony doctrine-orm