我是Symfony的新手(我已经习惯了ZF1和ZF2),刚开始研究新项目。 我正处于将应用程序分成捆绑的阶段,而在这样做的过程中,我看到了第一个障碍。该应用程序由几个捆绑包组成,这些捆绑包将以某种方式使用帖子,但每种类型都有一点不同。例如,我将有一个包含NewsPost实体的新闻包和另一个包含实体blogpost的包博客。当然,我可以在不使用超类的情况下使用单独的实体类,但是看起来更适合使用超类Post并且只在每个包内创建子类。特别是因为每个post类与其他实体类具有相同的关系(例如,想想Tag)。
我已经阅读过Symfony中的bundle继承,但它似乎不是这里的方法,因为我只想继承实体类,而且看起来它只能有一个子包每个父包。我更喜欢将捆绑包分开,因为它们将包含与彼此无关的功能。 什么是处理这样的场景的好方法?
答案 0 :(得分:3)
如果您希望覆盖第三方捆绑包,则捆绑继承很有用,主要是如果您要执行的操作是覆盖提供相同功能的所有文件。
例如,您可以通过将第三方包FOSUserBundle
扩展到AcmeUserBundle
来覆盖第三方包{%}来自定义,改进,更改父包的各个部分的逻辑。
但是同一个捆绑包必须提供相同的功能。因此“AcmeUserBundle
延伸FOSUserBundle
因为它打算与FOSUserBundle
相同,例如add support for a database-backed user system in Symfony2”。
在您的情况下,BlogBundle
或NewsBundle
与PostBundle
没有任何共同之处,因此捆绑继承不是此处的方法。
对于您的特定情况,您只需使用简单继承,您保持实体并不重要。 (事实上你甚至可以have a single bundle,Elnur精美地解释。作为旁注,你也可以快速查看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 \ BlogBundle \实体\博文强>
<?php
namespace Acme\BlogBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Acme\PostBundle\Entity\Post as BasePost;
/**
* @ORM\Entity
*/
class BlogPost extends BasePost
{
// ....