2

次の要件でバンドルを実装するスマートな方法を見つけようとしています。

  1. という名前のロジックを持つバンドルがありますLogicABundle
  2. 私は、デザインと呼ばれるメニューと共通のものを含むバンドルを持っています AppBundle
  3. LogicBBundleエンティティに関連するいくつかのエンティティを含むロジックを含むLogicABundle別のバンドルがあります

このセットアップから 2 つのアプリケーションを「デプロイ」できるようにしたいことはわかっています。

  1. アプリケーション 1 はLogicABundleandを使用しますAppBundle
  2. 2 つ目は を使用しLogicABundleLogicBBundleAppBundle

問題は、2 番目のアプリケーションでは、いくつかのエンティティを から に関連付ける必要があることですLogicABundle。これにより、エンティティが を指しLogicBBundleている場合、最初の「展開」オプションが壊れます。LogicABundleLogicBBundle

これら 2 つの異なるアプリケーションを個別に展開するスマートなソリューションはありますか? わかりやすくするために、次の例を示します。

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; 
}

スタンドアロン アプリケーションで Game クラスを LogicABundle のみで使用できるようにしたいと考えています。2 つ目のアプリケーションでは、メッセージ関係を持つゲーム エンティティが必要です。

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 または別のソース カウント ツール) を使用している場合は、2 つの個別の Symfony2 アプリケーションを作成することをお勧めします (それぞれが on リポジトリにあります)。また、すべてのバンドルは独自のリポジトリを取得し、Composer を使用して依存関係を正しくセットアップしてから、バンドル (LogicABundle、LogicBBundle、AppBundle) をベンダーとしてインストールします。

更新:異なるバンドルは異なるエンティティを必要とするため、1 つの方法は、ベース エンティティのみを必要とするバンドル内のベース エンティティを指定し、追加のリレーションを使用して他のバンドル内のエンティティを拡張することです ( Doctrine Inheritance Mappingを参照)。

たとえば、 LogicABundle で定義し、LogicBBundleEntityAで定義して、エンティティに追加の関係を拡張および追加します。EntityA2EntityA2EntityA

更新:なぜこれを行う必要があるのか​​について追加情報を提供していないため、今は推測することしかできませんが、追加のアイデアの 1 つは、両方のバンドルで同じエンティティを単純に使用することです。のロジックはLogicABundle、追加の関係を単純に無視します。それは、ほとんどの開発者があなたの状況で行うことだと思います。

たとえば、FOSUserBundle のような一般的な機能を提供するバンドルを考えてみましょう。バンドルはいくつかのモデルを定義しますが、FOSUserBundle を使用するすべてのアプリケーションがエンティティのすべてのフィールドを使用する必要があるわけではありません (現在開発中のアプリケーションでは、FOSUserBundle のグループ機能を完全に無視しています)。

共通のエンティティ クラスを使用し、これらの追加の関係を無視できる場合は、さらに情報を提供してください。

于 2012-09-10T13:04:34.810 に答える