将所有Doctrine2实体移动到一个Bundle中是不是一种坏习惯?

时间:2015-06-06 21:40:06

标签: symfony doctrine-orm

这是我的问题; 假设您创建了从一个捆绑到另一个捆绑的关系 (在这种情况下,一个用户=>很多通知) (UserBundle => NotificationsBundle)

/**
 * @ORM\OneToMany(targetEntity="Gabriel\NotificationsBundle\Entity\Notification", mappedBy="notificationOwner")
 */
private $notifications;

问题:当Notificationsbundle从AppKernel中删除时,上面的类会丢失,并且整个应用程序崩溃,如果所有实体都被移动到同一个包中,则不会发生这种情况。 只要存在此关系,您将永远无法再次禁用该包:/

有没有办法解决这个问题“symfony方式”

1 个答案:

答案 0 :(得分:1)

Symfony Best Practices页面建议将所有实体存储在" main" bundle(通常是AppBundle)或直接在/ src目录中创建特定的实体文件夹结构。

所以:

symfony2-project/ ├─ ... └─ src/ └─ AppBundle/ └─ Entity/ ├─ Comment.php ├─ Post.php └─ User.php

或者:

  

如果你更高级,你当然可以将它们存放在你自己的下面   src中的命名空间/.

严格来说,捆绑包应该是完全独立的,因此通常不应直接引用另一个捆绑包的实体,否则它们会紧密耦合,从而导致您遇到的问题。

对于私有项目(即您不发布其他人使用的捆绑包),可以使用多个紧密耦合的捆绑包,但仍然实体应该全部放在主AppBundle或它们自己的捆绑/文件夹结构中根据上面的Symfony最佳实践页面。