从不同的bundle扩展实体

时间:2014-03-04 01:22:02

标签: symfony bundle

我是Symfony的新手(我已经习惯了ZF1和ZF2),刚开始研究新项目。 我正处于将应用程序分成捆绑的阶段,而在这样做的过程中,我看到了第一个障碍。该应用程序由几个捆绑包组成,这些捆绑包将以某种方式使用帖子,但每种类型都有一点不同。例如,我将有一个包含NewsPost实体的新闻包和另一个包含实体blogpost的包博客。当然,我可以在不使用超类的情况下使用单独的实体类,但是看起来更适合使用超类Post并且只在每个包内创建子类。特别是因为每个post类与其他实体类具有相同的关系(例如,想想Tag)。

我已经阅读过Symfony中的bundle继承,但它似乎不是这里的方法,因为我只想继承实体类,而且看起来它只能有一个子包每个父包。我更喜欢将捆绑包分开,因为它们将包含与彼此无关的功能。 什么是处理这样的场景的好方法?

1 个答案:

答案 0 :(得分:3)

为什么bundle继承在你的情况下没用?

如果您希望覆盖第三方捆绑包,则捆绑继承很有用,主要是如果您要执行的操作是覆盖提供相同功能的所有文件。 例如,您可以通过将第三方包FOSUserBundle扩展到AcmeUserBundle来覆盖第三方包{%}来自定义,改进,更改父包的各个部分的逻辑。

但是同一个捆绑包必须提供相同的功能。因此“AcmeUserBundle延伸FOSUserBundle因为它打算与FOSUserBundle相同,例如add support for a database-backed user system in Symfony2”。

在您的情况下,BlogBundleNewsBundlePostBundle没有任何共同之处,因此捆绑继承不是此处的方法。

对您的实体使用简单继承

对于您的特定情况,您只需使用简单继承,您保持实体并不重要。 (事实上​​你甚至可以have a single bundleElnur精美地解释。作为旁注,你也可以快速查看How do you organize your bundles in Symfony2?)。

<强>的Acme \ PostBundle \实体\邮

<?php

namespace Acme\PostBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Acme\PostBundle\Model\PostInterface;

/**
 * @ORM\Entity
 */
class Post implements PostInterface
{
    // ....

<强>的Acme \ NewsBundle \实体\ NewsPost

<?php

namespace Acme\NewsBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Acme\PostBundle\Entity\Post as BasePost;

/**
 * @ORM\Entity
 */
class NewsPost extends BasePost
{
    // ....

<强>的Acme \ BlogBu​​ndle \实体\博文

<?php

namespace Acme\BlogBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Acme\PostBundle\Entity\Post as BasePost;

/**
 * @ORM\Entity
 */
class BlogPost extends BasePost
{
    // ....