0

私はSymfony1.4にDoctrineフォームを持っています。

私は何をする必要がありますか:

sfWidgetFormDoctrineChoiceオブジェクトで現在提供しているものと同じ選択肢を表示する必要がありますが、タブ付きのビューで表示したいと思います。

私の現在のビューは次のようになります。

[ ] option1
[ ] option2
[ ] option1.1
[ ] option1.2
[ ] option1.3
[ ] option2.1
[ ] option2.2
[ ] option2.3
[ ] option2.4

そして、私はそれらをこのように見せたいと思います:

+-------------+-------------+
| > option1 < |   option2   |   (tabs, option1 is the currently selected one)
+-------------+-------------+--------------------------+
 [ ] option1.1      (options on first tab)
 [ ] option1.2
 [ ] option1.3
+------------------------------------------------------+

オプションは、parent属性を使用して関連付けられます。
一番上の行にあるものはチェックできず、チェックparentできますNULL。クラスを拡張する方法、つまり、どのメソッドを再定義するかを知っていれば、その部分を自分で解決できると思います。

私が試したこと:

これはウィジェットのクラス継承です:

sfWidgetFormDoctrineChoice < sfWidgetFormChoice < sfWidgetFormChoiceBase < sfWidgetForm < sfWidget

そして、これはフォームのクラス継承です。

ProductForm < BaseProductForm < BaseFormDoctrine < sfFormDoctrine < sfFormObject

そして、これはウィジェットがビューに印刷される方法です:

<?php echo $form['product_type_list'] ?>

その最後の行で、フォームクラスに魔法の__get()メソッドがあり、ウィジェットクラスに(おそらく)__ toString()メソッドがあると思いましたが、どれも見つかりませんでした。 Symfony1.4とDoctrineでウィジェットを拡張する方法がわからない。

誰かが私を正しい方向に向けることができますか?

4

1 に答える 1

1

その問題を解決するには、2つの可能性があると思います。

1つ目は、から継承する独自のウィジェットを作成することsfWidgetFormDoctrineChoiceです。__toString()したがって、要件に合わせてカスタムメソッドを実装できます。(ドキュメントを参照)

あなたは見てsfWidgetFormChoice、ターゲットメソッドselfを持っている必要がありますsfWidgetFormDoctrineChoice。独自のクラス継承を作成する場合は、メソッドとsfWidgetFormDoctrineChoiceを上書きできます。さらに、このウィジェット用に独自のレンダラーを実装して、jsタブやGUIを作成することもできます。rendergetJavaScripts

2番目のオプションは、デフォルトのフォームフィールドを非表示にし、javascriptを使用して新しい表現を作成することです。タブを作成したいので、これを有効にするには、すでにjsを使用する必要がありますか?!

于 2013-01-10T16:33:34.267 に答える