2012-02-24 8 views
3

私はdoctrineモデルのいくつかのフィールドを持つかなりシンプルなフォームを持っています。symfonyフォームがデフォルト設定を尊重しない

$this->widgetSchema['fields'] = new sfWidgetFormDoctrineChoice(array(
    'model'   => 'FieldModel', 
    'expanded'  => true, 
    'multiple'  => true,)); 

$this->validatorSchema['fields'] = new sfValidatorDoctrineChoice(array(
    'model' => 'FieldModel', 
    'multiple' => true,)); 

フィールドはチェックボックスとしてフォームに表示され、正しくチェックして保存できます。この 'フィールド'フィールドはjson構造に変換され、テキストとしてデータベースに保存されます。ここまでは順調ですね。

注:フィールド 'fields'はデータベースにTEXTとして保存されますが、ユーザーはチェックボックスのリストから値を選択できる必要があります。

問題は、デフォルトでチェックボックスのいくつかをチェックしたい場合に発生します。

私が実行しようとした:

「keyX」はデータベース内のフィールドの主キー(文字列)の実際の値に対応する
$this->setDefault('fields', array('key1','key2','key3')); 

私は

$this->getDefault('fields'); 

をすれば、私は私が以前に入れて正確に何を取り戻します。

しかし、symfonyはチェックボックスのチェックボックスを出力していません。私は選択されたウィジェットに対して 'expanded'と 'multiple'の両方のオプションを取り除こうとしました。

他のウィジェット(テキスト入力、選択など)のデフォルト値を設定します。

Btw;フィールドモデルはi18nです。両方の格納/取得が期待通りに機能するので、ここで重要かどうかはわかりません。

また、フォームはinclude_partial()によって別のフォームの一部としてレンダリングされます。それは何かを妨害することができますか? 「親」フォームクラスで:

$this->embedRelation('TheRelationThatBugsMe'); 

そして「親」のため_form.phpに:

include_partial('the_relation_that_bugs_me/form', array('form' => $form['TheRelationThatBugsMe'])); 

誰も私が間違っているかもしれないという考えを持っている、または少なくともん私はどこから掘削を開始すべきかについての指針を私に与えることができますか?

[UPDATE]

I(つまり、データベース内のフィールドとして存在していない)形式「fields2」に新しいフィールドを作成し、ウィジェットを作成するために、にまったく同じコードを使用する場合、バリデフォルトを設定すると、デフォルトが正しくレンダリングされます。どのようにデータベースの列にマップされたフィールドのデフォルトを設定しても機能しないのですか?

答えて

3

updateDefaultFromObjectsfDoctrineFormで呼び出される前にsetDefaultを呼び出す場合、オブジェクトが存在する場合、オブジェクトの値はフォームのデフォルトを上書きします。 updateDefaultsFromObjectには該当するロジックが含まれています。後でsetDefaultに電話するか、メソッドをオーバーライドする必要があります。

関連する問題