我正试图找到一种智能的方法来实现我的捆绑包,并满足以下要求:
- 我有一个名为
LogicABundle
的逻辑捆绑包 - 我有一个名为
AppBundle
- 我有另一个带有逻辑
LogicBBundle
和一些实体的Bundle与LogicABundle
实体相关
我知道希望能够从这个设置中"部署"两个应用程序:
- 应用程序一使用
LogicABundle
和AppBundle
- 第二个使用
LogicABundle
、LogicBBundle
和AppBundle
问题是,对于第二个应用程序,我需要将一些实体从LogicABundle
关联到LogicBBundle
,这会导致第一个"部署"选项停止,如果我在LogicABundle
中只有一个实体指向LogicBBundle
。
是否有智能解决方案可以独立部署这两个不同的应用程序?以下是一个示例,以便更容易理解:命名空间My\LogicABundle\Entity\Game;
use DoctrineORMMapping as ORM;
/**
* MyLogicABundleEntityGame
*
* @ORMEntity
*
*/
class Game
{
/**
* @var integer $id
*
* @ORMColumn(name="id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string $title
*
* @ORMColumn(name="title", type="string")
*/
private $title;
/**
*
* @var Message
* @ORMManyToOne(targetEntity="MyLogicBBundleEntityMessage", inversedBy="games")
* @ORMJoinColumn(name="messag_id", referencedColumnName="id", nullable=false)
* @AssertNotNull()
*/
private $message;
}
我希望能够在我的独立应用程序中只使用LogicABundle中的Game类,而在我的第二个应用程序中,我需要具有消息关系的游戏实体。
我不确定,但我也有同样的问题,我只是发现:http://symfony.com/en/doc/current/cookbook/doctrine/resolve_target_entity.html
希望不要迟到;)
如果您正在使用Git(或SVN或其他源countrol工具),我建议您创建两个独立的Symfony2应用程序(每个应用程序都在其存储库中)。此外,每个捆绑包都有自己的存储库,我会使用Composer正确设置依赖项,然后作为供应商安装捆绑包(LogicABundle、LogicBBundle、AppBundle)。
更新:由于不同的bundle需要不同的实体,一种方法是在bundle中指定只需要基本实体的基本实体,并用其他关系扩展另一个bundle中的实体(请参阅条令继承映射)。
例如,在LogicABundle中定义EntityA
,在LogicBBundle中指定EntityA2
,其中EntityA2
扩展EntityA
并向实体添加其他关系。
更新:由于您没有提供为什么需要这样做的额外信息,我现在只能猜测,但一个额外的想法是在两个捆绑包中简单地使用相同的实体。LogicABundle
中的逻辑将简单地忽略附加关系。我认为这是大多数开发人员在您的情况下会做的事情。
例如,考虑提供常见功能的捆绑包,如FOSUserBundle。捆绑包定义了一些模型,但并不是每个使用FOSUserBundle的应用程序都必须使用实体的每个字段(在我目前正在开发的应用程序中,我完全忽略了FOSUserBundle的组功能)。
如果可以使用公共实体类并忽略这些附加关系,请提供进一步的信息。