我正在努力弄清楚如何在Symfony中实现两个捆绑包之间的正确分离,并且我遇到了一个学说问题。
我有两个捆绑包,一个更通用的捆绑包(充满抽象类),称为' BaseProduct'然后是该捆绑包的实现(提供专门化该捆绑包功能的机会),称为“ClientProduct'。
我在&Product产品中有两个实体。捆绑的。
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上有任何捆绑这样做我有兴趣看到它们)。
答案 0 :(得分:1)
我碰到了类似的东西,我使用的解决方法是提供一个具体的基类,它被简单地视为抽象(即:基类永远不会在任何地方实例化)。
如果你想强制执行基类的“抽象性”(所以其他开发人员不会愚蠢地尝试实例化它),你可以在它的构造函数中抛出异常。