【问题标题】:Extend Entity from different bundle从不同的包中扩展实体
【发布时间】:2014-04-05 08:16:13
【问题描述】:

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

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

【问题讨论】:

    标签: symfony bundle


    【解决方案1】:

    为什么包继承在你的情况下没有用

    如果您希望覆盖第三方包,并且主要是在您打算覆盖提供相同功能的所有文件时,包继承很有用。 例如,您可以覆盖第三方捆绑包FOSUserBundle,将其扩展为您的AcmeUserBundle,以自定义、改进、更改父捆绑包各个部分的逻辑。

    但是同一个包必须提供相同的功能。所以“AcmeUserBundle 扩展了FOSUserBundle 因为它打算和FOSUserBundle 做同样的事情,例如add support for a database-backed user system in Symfony2”。

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

    为您的实体使用简单的继承

    对于您的特定情况,您只需要使用简单的继承,保留实体并不重要。 (事实上​​,您甚至可以have a single bundle,正如Elnur 所解释的那样。作为旁注,您还可以快速查看How do you organize your bundles in Symfony2?)。

    Acme\PostBundle\Entity\Post

    <?php
    
    namespace Acme\PostBundle\Entity;
    
    use Doctrine\ORM\Mapping as ORM;
    use Acme\PostBundle\Model\PostInterface;
    
    /**
     * @ORM\Entity
     */
    class Post implements PostInterface
    {
        // ....
    

    Acme\NewsBundle\Entity\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\Entity\BlogPost

    <?php
    
    namespace Acme\BlogBundle\Entity;
    
    use Doctrine\ORM\Mapping as ORM;
    use Acme\PostBundle\Entity\Post as BasePost;
    
    /**
     * @ORM\Entity
     */
    class BlogPost extends BasePost
    {
        // ....
    

    【讨论】:

    • 太棒了。谢谢帕特,这就是我要找的。​​span>
    猜你喜欢
    • 2016-04-15
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多