0

私は 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

4

2 に答える 2

0

ドキュメントのこの部分を見てみましたか? 「フォームの埋め込み」がニーズに合っているようです。

于 2013-07-26T12:05:53.497 に答える
0

vendor-dir から Infinite Form Bundle に関連するすべてを削除し、composer で再インストールした後、すべてが機能するようになったため、vendor-directory の PolyCollection の PHP ファイルに何か問題があったようです。しかし、あなたの努力に感謝します YoanCh

于 2013-08-16T12:09:57.720 に答える