2011-05-17 11 views
2

新しいWebサイトを構築しています。これは、別のWebサイトで使用されているsymfonyソフトウェアを再利用します。コードとデータの重複を避けるため、再利用可能なコンポーネントをプラグイン(「app-plugin」)に移動します。プラグインは、Webサイトのsvnリポジトリでsvn-externalとして設定されます。Symfony:他のプラグインでプラグインモデルをオーバーライド

既存のsymfonyインスタンスには、元々は他のプラグイン(例:sfDoctrineGuardPlugin)で定義されているオーバーライドされたdoctrineクラス(モデル、フォーム、フォームフィルタ)が含まれています。上書きされたクラスは両方のsymfony-instancesで再利用できるので、私はそれらを "app-plugin"に移します。しかし、これは問題を引き起こします:

たとえば、誰かがsymfony doctrine:build-formsを実行すると、移動したファイルはlib/form/doctrine内のタスクによって再作成され、空のクラス定義が含まれます。その理由はわかります。symfonyは、 "app-plugin"が既にフォームクラスを定義していることをどのように知っていたでしょうか?唯一の方法は、タスクを実行する前にすべてのクラスをオートロードし、クラスがすでに使用可能かどうかをチェックすることです。

回避策は、app-pluginのconfig/autoload.ymlでこれらのクラスを除外することです。しかし、より良い方法がありますか?

私は通常のプラグイン(例えばsfGuard)と共有コンポーネントが含まれている私たちのプラグインとの混同を避けるために用語「アプリ・プラグイン」を使用してい

編集。


前:

dependencies before


後:

dependencies after

答えて

0

アプリプラグインの config/autoload.ymlで元のモデルを除外するよりも良い方法はないようです。上の画像に示すようにモデルクラスを派生させることができても、ビルドフォームタスクを実行するとすぐに問題が発生します。私はこれが不可能であることを明らかにするフォームジェネレータのソースコードを調べました。したがって、唯一の解決策は、ビルドフォームタスクを避け、フォームジェネレータを書き直すか、すでに述べたようにautoload.ymlを使用することです。

2

この "アプリ・プラグイン" とは何であるあなたが話していますか?通常は、オーバーライドされたクラスをどこに残しておき、そのクラスに含まれているコードをそのクラスに移します(これはプラグインにあると考えられます)。特定のsymfonyアプリケーションの動作を変更したい場合は、これらのオーバーライドされたクラスを編集することができます。

+0

通常のプラグイン(sfGuardPluginなど)と、両方のウェブサイトの再利用可能なコンポーネントを含むプラグインとの混同を避けるため、「app-plugin」という用語を使用しました。オーバーライドされたsfGuardPluginモデル/フォームは、両方のWebサイトでも再利用できます。この場合、親クラスを定義するsfGuardPluginにオーバーライドされたクラスを移動することはできません。 – fishbone

+0

@fishbone:私はあなたの問題をよりよく理解していると思います。 sfGuardPluginを編集することにあまり気にしない方がいらっしゃる場合は、「options:¥n symfony:\ n フィルタを追加して、schema.ymlファイルの自動フォームとフィルタ生成を無効にすることができます:その上に「false」を付け、app-pluginのsfpluginファイルを継承します。あなたはまだモデルファイルに問題があります。 – greg0ire

関連する問題