4

複数のアプリケーション(同じプロジェクト内にある)で共通の教義エンティティを再利用する必要がある場合があります。これらのアプリケーションは、対応する機関によって使用される情報システムの単なるインスタンスです。

私はすべてのエンティティとリポジトリを別々のバンドルに分離しましたが、これまでのところ魅力のように機能しました。キャッチは次のとおりです。これらのインスタンスの一部のみが他の機能をサポートする必要があるという要件を受け取りました。変更には、一部のエンティティに新しい属性/関係を追加することが含まれます。

簡単な例を次に示します。

多数の学部(インスタンス)がある大学があります。情報システムは学士課程のみをサポートするように構築されていましたが、1か月前に、専門分野修士課程もサポートする必要がありました。彼らは、同じアプリケーションインスタンスと考えているすべてのものを処理したいと考えています。これは、これらのインスタンスの一部にのみ適用されます

質問:元のエンティティの機能を維持しながら、影響を受けるエンティティを「オーバーライド」する方法はありますか?エンティティ構成(YAMLまたはアノテーション、重要ではありません)をオーバーライドできますか?コードベースを維持し、すべてのエンティティ/リポジトリを別のパッケージにコピーしたくないのですが...

4

3 に答える 3

5

イベントをキャッチすることで、読み込み中のエンティティのクラスメタデータをオーバーライドできます。

EventListener

<?php

namespace Lol\RandomBundle\EventListener;

use Doctrine\ORM\Event\LoadClassMetadataEventArgs;

class ClassMetadataListener
{
    /**
     * Run when Doctrine ORM metadata is loaded.
     *
     * @param LoadClassMetadataEventArgs $eventArgs
     */
    public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs)
    {
        $classMetadata = $eventArgs->getClassMetadata();

        // Override User class to flag MappedSuperclass.
        if ('AnotherLol\AnotherRandomBundle\Entity\User' === $classMetadata->name) {
            // Do whatever you want...
            $classMetadata->isMappedSuperclass = true;
        }
    }
}

サービス構成

services:
    lol.random.listener.class_metadata:
        class: Lol\RandomBundle\EventListener\ClassMetadataListener
        tags:
            -  { name: doctrine.event_listener, event: loadClassMetadata }
于 2015-07-24T06:46:48.513 に答える
2

Sympatchは、コードベースを破壊することなく、エンティティを含むSymfony2プロジェクトのコード部分をオーバーライドするためのツールを提供します。https://github.com/DHorchler/SympatchBundleを参照してください。

于 2013-03-17T21:16:17.257 に答える
1

これが何を意味するのかわかりません。可能であるように見えますが、まだ文書化されていません。ドキュメントとコードのどちらが進行中であるかはわかりません。

この号では、stofはそれがまったく不可能であることを示唆しています。

これにはSCMブランチを使用する必要があると思います。

于 2012-10-13T11:46:08.730 に答える