2011-11-18 1 views
5

私はSymfonyフォームが新しく、親オブジェクトを参照する隠しフィールドを持つフォームをどうやって作成するかを考えています。たとえば、連絡先と多対1の関係を持つリストがあります。新しい連絡先を作成するときは、連絡先が追加されるリストのIDを持つ非表示のフィールドが必要です。symfony2フォーム - フィールド参照親オブジェクトを隠す方法

現在ContactTypeフォームにListIdTypeというフォームを埋め込むようにしています。 ListIdTypeフォームの唯一のフィールドはリストのIDです。これは、空の連絡先エンティティにリストを設定することができ、contact[list][id]というフォーム(ListIdTypeフォームで定義されている)の要素を自動的に設定するため、うまく機能します。この問題は、フォームを送信すると、リストクラスに要素 "id"または "setId()"が存在しないというエラーが表示されます。

私は何か間違っていると感じていますが、私は正しい方向に私を指すためのドキュメントを見つけることができません。

+0

私はhttps://github.com/symfony/symfony/pull/1951を見つけました。その唯一の解決策はありますか?これを行うには、ネイティブのSymfonyの方法があるはずです。 – Icode4food

+2

「データトランスフォーマー」を使った適切な対処方法については、http://symfony.com/doc/current/cookbook/form/data_transformers.html – KevinS

+0

をご覧ください。運が良ければ、HiddenEntityTypeはすぐにSymfonyに移行します: https://github.com/symfony/symfony/issues/8293 – webDEVILopers

答えて

6

私が思いついた解決策は、property_pathオプションがFALSEに設定された隠しフィールドを追加することです。ここでは、コードContactType::buildFormである:

$builder->add('list_id', 'hidden', array(
     'data' => $data->getList()->getId(), 
     'property_path' => FALSE, 
    )); 

私はその後、私のコントローラ内のフィールドを扱います。

これは機能しますが、私にとって最良の解決策ではありません。誰かがより良い方法を提案できるなら、私はまだ開いている!

3

最近、私はentity_idフォームタイプを追加するGregwar's Forumバンドルを見つけました。それは自動的に必要な変換のほとんどを行い、必要なものだけかもしれません。

https://github.com/Gregwar/FormBundle

関連する問題