2

我正在尝试找出一种聪明的方法来实现我的捆绑包,并满足以下要求:

  1. 我有一个名为的逻辑捆绑包LogicABundle
  2. 我有一个包含设计和菜单等常见事物的捆绑包 AppBundle
  3. LogicBBundle我有另一个包含与实体相关的LogicABundle实体的逻辑捆绑包

我知道希望能够从此设置中“部署”两个应用程序:

  1. 应用程序一使用LogicABundleandAppBundle
  2. 第二个使用LogicABundle,LogicBBundleAppBundle

问题是,对于第二个应用程序,我需要将一些实体从LogicABundleto关联起来LogicBBundle,如果我只有一个LogicABundle指向的实体,这会导致第一个“部署”选项停止LogicBBundle

是否有一个聪明的解决方案来独立部署这两个不同的应用程序?为了更容易理解,这里举个例子:namespace 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 使用 Game 类,而在我的第二个应用程序中,我需要具有消息关系的游戏实体。

4

2 回答 2

2

我不确定,但我有同样的问题,我刚刚发现:http ://symfony.com/en/doc/current/cookbook/doctrine/resolve_target_entity.html

希望不要迟到;)

于 2013-08-29T14:07:56.880 回答
1

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

更新:由于不同的捆绑包需要不同的实体,一种方法是在捆绑包中指定只需要基础实体的基础实体,并使用其他关系扩展另一个捆绑包中的实体(参见Doctrine Inheritance Mapping)。

例如,EntityA在 LogicABundle 中定义并EntityA2在 LogicBBundle 中定义其中EntityA2扩展EntityA并向实体添加附加关系。

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

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

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

于 2012-09-10T13:04:34.810 回答