新しい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)と共有コンポーネントが含まれている私たちのプラグインとの混同を避けるために用語「アプリ・プラグイン」を使用してい
編集。
前:
後:
通常のプラグイン(sfGuardPluginなど)と、両方のウェブサイトの再利用可能なコンポーネントを含むプラグインとの混同を避けるため、「app-plugin」という用語を使用しました。オーバーライドされたsfGuardPluginモデル/フォームは、両方のWebサイトでも再利用できます。この場合、親クラスを定義するsfGuardPluginにオーバーライドされたクラスを移動することはできません。 – fishbone
@fishbone:私はあなたの問題をよりよく理解していると思います。 sfGuardPluginを編集することにあまり気にしない方がいらっしゃる場合は、「options:¥n symfony:\ n フィルタを追加して、schema.ymlファイルの自動フォームとフィルタ生成を無効にすることができます:その上に「false」を付け、app-pluginのsfpluginファイルを継承します。あなたはまだモデルファイルに問題があります。 – greg0ire