2012-09-10 46 views
2

我试图想出一个聪明的办法来实现下列要求我的包:如何设置Symfony2的捆绑独立与相关实体

  1. 我有一个包名为LogicABundle
  2. 我有一个捆绑的逻辑与常见的东西作为设计和菜单称为 AppBundle
  3. 我还有一个捆绑的逻辑LogicBBundle一些实体 相关LogicABundle实体

我知道希望能够 “部署” 这种设置两个应用:

  1. 申请一个使用LogicABundleAppBundle
  2. 第二个使用LogicABundleLogicBBundleAppBundle

问题是,对于第二个应用程序,我需要将一些实体从LogicABundle改为LogicBBundle,这会导致第一个“deplo y“选项来刹车,如果我只是有一个实体LogicABundle指向LogicBBundle

是否有独立部署这两种不同应用程序的智能解决方案? 下面是一个示例,以便更容易理解: 命名空间My \ LogicABundle \ Entity \ Game;

use Doctrine\ORM\Mapping as ORM; 
/** 
* My\LogicABundle\Entity\Game 
* 
* @ORM\Entity 
* 
*/ 
class Game 
{ 
    /** 
    * @var integer $id 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @var string $title 
    * 
    * @ORM\Column(name="title", type="string") 
    */ 
    private $title; 

    /** 
    * 
    * @var Message 
    * @ORM\ManyToOne(targetEntity="\My\LogicBBundle\Entity\Message", inversedBy="games") 
    * @ORM\JoinColumn(name="messag_id", referencedColumnName="id", nullable=false) 
    * @Assert\NotNull() 
    */ 

    private $message; 
} 

我希望能够使用游戏类的我只能用LogicABundle独立的应用程序,并在我的第二个应用程序,我需要比赛实体消息的关系。

+0

您可以从其他的Symfony的 – Maks3w

+0

扩展束如果我会用BundleInheritance我需要一个ExtendedLogicABundle,它继承自LogicABundle,在那里我扩展了与LogicBBundle相关的实体。此外,正确覆盖实体的部分还没有记录:http://symfony.com/doc/current/cookbook/bundles/override.html这也意味着我需要一个额外的Bundle用于相关的实体,用于evey现有的Bundle 。例如。我有一个UserBundle,它也将与LogicBBundle有关系,在这个设置中我还需要一个ExtendedUserBundle。这种方法并没有那么大的吸引力。 – m0c

+0

请看我更新的答案。 –

回答

1

如果您使用的是Git(或SVN或其他源代理工具),我会建议创建两个单独的Symfony2应用程序(每个应用程序都在其存储库中)。另外,每个软件包都有自己的存储库,我将使用Composer正确设置依赖关系,然后作为供应商安装软件包(LogicABundle,LogicBBundle,AppBundle)。

更新:由于不同的包需要不同的实体,一个方法是指定的,它仅需要基础机构捆基础机构,并在其他同捆额外的关系(见Doctrine Inheritance Mapping)扩大实体。

例如,在LogicABundle限定EntityA和LogicBBundle限定EntityA2其中EntityA2延伸EntityA和增加了额外的关系的实体。

更新:既然你为什么要做这个你没有提供更多的信息,我只能猜现在,而是一个额外的想法是简单地使用相同的实体在两个包。 LogicABundle中的逻辑会简单地忽略其他关系。我认为这是大多数开发人员在你的情况下会做的。

例如,考虑提供像FOSUserBundle这样的通用功能的软件包。该包定义了一些模型,但并不是每个使用FOSUserBundle的应用程序都必须使用实体的每个字段(在我正在开发的应用程序中,我完全忽略了FOSUserBundle的组功能)。

如果可以使用公共实体类并忽略这些附加关系,请提供更多信息。

+0

+1,**作曲家**是正确的处理方式。 – Florent

+0

这个解决方案的问题是我需要Logicabundle的两个版本,一个与LogicBBundle有实体关系,另一个没有。我只是想知道Symfony2中有一个“干净”的解决方案。 – m0c

+0

当这两个包中的实体不同时,您不能共享它们。你可以将它们放在同一个包中,但我宁愿将它们分成不同的包。例如,CoreABundle包含LogicABundle和CoreBBundle的实体LogicBBundle的实体 –