私は Symfony2 を使用して、Shelf-Entity を編集できるフォームをセットアップしています。
シェルフには、Readable エンティティのコレクションが含まれています (例: Book、Magazine など - すべて Readable から継承)。
ユーザーはさらに Readable-Entities を追加することができ (フォームは JavaScript によって拡張されます)、追加したい Readable のタイプをドロップダウンから選択できます。選択したドロップダウン値に応じて、さまざまなフォーム フィールドがレンダリングされます。ここまでは順調ですね。
ここで、フォームがサーバーに送信されると、ユーザーがフォームで選択した Readable-Type に応じて、異なるエンティティ タイプをインスタンス化する必要があります。私が何もしなければ、Symfony は基本クラスの Readable をインスタンス化するだけです (Book、Magazine などではありません)。
ドロップダウンから選択した値に応じて、正しいタイプの Readable をインスタンス化するように Symfony に指示するにはどうすればよいですか?
私は FormEvent-Listeners で試しましたが、:
- PRE_SUBMITでは、$event->getData() を使用して「生の」フォーム データを含む配列のみを取得します。つまり、これまでエンティティはインスタンス化されていません。ただし、この段階では、まだドロップダウンの値にアクセスできます。
- SUBMITでは、フォーム データは既に適切なエンティティに割り当てられています。また、新しい Readable は、基本の Readable-Class で既にインスタンス化されています。しかし今、ドロップダウンから値にアクセスできなくなりました。
これを行う正しい方法は何ですか?
EDIT
Shelf FormType の最小限のコード例を追加しました
:
https://gist.github.com/anonymous/401495b701982adafb96