2012-04-12 28 views
0

Symfony2にフォームを埋め込む際に問題があります。私は技術的に間違ったことをしている可能性がありますが、私が作った間違いはdb-setupのレベルにあり、最初にフォームを埋め込む必要はありません。私がコードを提示する前にまずそれに焦点を当てましょう。Symfony2で埋め込みフォームを使用する

私はVとOという2つのエンティティを作成しました。これらは両方とも場所を表しますが、場所の種類は異なります。 ref-idを介して、それぞれエンティティアドレスを参照します。複数のVは同じアドレスを参照することができ、複数のOは同じアドレスを参照することができ、同じアドレスにVとOが存在することさえあります。 V、O、アドレスを表示する(コントローラとルーティング作業)。アドレスの作成や編集もうまくいきます。私はAddressTypeというフォームタイプを作っています。これはレンダリングされ、うまく動作します。

VとOもformTypes:VTypeとOTypeを持ちます。彼らは、Twigテンプレート、ルート、コントローラアクションなどを適所に持っています。

これで、新しいVをフォームに入力できるようになりました。新しいVを入力するためのフィールドもあります。だから、私はユーザーが何らかの種類のリストから既に存在するアドレスを選ぶことを望んでいないが(しかし、私はそれが機能している)、新しいアドレスを追加できるようにしたい。アドレスがdbテーブルの "Addresses"に存在していれば(これも可能です)、Symfony2は同じアドレスを再度作成するのではなく、既存のアドレスを参照する必要があります。

私の問題は、VまたはOフォームに埋め込まれたAddressフォーム(AddressType)の提示に成功しないことです。基本的には、AddressTypeフォームをVまたはOフォームの一部としてレンダリングする必要があります。これは可能ですか?

しかし、私のdb-setupは大丈夫ではないかもしれませんし、Addressを別のエンティティ(およびdbテーブル)にしてはいけませんでしたが、エンティティVとOの一部にする必要がありました。私が推測する問題も解決するでしょうが、それは良い練習ですか?

ご協力いただきありがとうございます。

+0

まず基本的なことを考えてみましょう。あなたの質問を更新し、Address、V、Oの間の関係(ymlまたは注釈)を投稿してください。これはあなたがどのような関係を使っているかを明確にします。 – Cerad

答えて

0

私も同様の問題がありました。これはやりにくい複雑な形です。 最良の方法はカスタムフォームタイプを作成することです。これは、私が好む生のフォームでも、リクエストクラスを直接使用してこのフォームを処理するコントローラアクションを作成することです。次に、ConstraintCollectionsを使用して入力を検証し、クラスとDoctrineのEntityManagerを使用してエンティティを直接作成できます。

このリンクは便利かもしれません - あるいは、少なくとも私に非オブジェクトの検証について多くのことを助けた: http://www.ricardclau.com/2011/11/how-to-use-symfony2-validator-component-without-forms-entities-and-data-arrays/

だから、基本的に、あなたはここにコードを記述する必要があります。

+0

ありがとうございました。間違いなく、あなたが提供した非常に興味深い記事です。これはSymfony2で確立するのがとても複雑であるというのは奇妙なことです。あなたの答えをありがとう。 –

関連する問題