2017-11-15 19 views
0

私は4つのチェックボックスに基づいて選択フィールドでSymfony2フォームを使用します。今、私は問題がある、私はこの選択フィールドでデータをリロードできないことを意味する。つまり、データベースに値9が格納されている場合、チェックボックス "不明"のランテスト "実行" は選択されません、このフォームでエンティティを読み込みます。選択した値で選択フィールド(チェックボックス)を表示する方法

->add('fu5LangTest', 'choice', array(
      'choices' =>array(
       'poor compliance'=>0, 
       'negative'=>1, 
       'positive (recognizes at least 1 image reliably)'=>2, 
       'unknown if "lang test" performed'=>9), 
      'choice_value' =>function (DataEFu5 $entity = null) { 
          return $entity ? $entity->getFu5LangTest() : ''; 
          }, 
      'expanded'=>true)) 

私はchoice_valueのAttributで多くのことを試してみましたが、私はそれが間違って使用していると思います。正しい方法は何ですか?私はいくつかの有用な情報が見つかりませんでした。私は何をしなければならない、リロードの後に​​正しいチェックボックスが選択されるだろうか?

保存プロセスが正常に動作しています。フィードバック

+0

あなたはデシベル値が9である場合、フォームが選択されていないしたいですか? – goto

+0

フォームを選択する必要はありません!しかし、私はあなたのポストのようにすると、それも動作しません。私のデータベースでは、Fu5LangTestフィールドに値{0}または{1}または{2}または{9}を格納します。選択肢フィールドがこの整数値を受け取り、正しいチェックボックスを選択するかどうかは自動ではありませんか? Fu5LangTestは単純なデータ型であり、配列ではありません。ありがとう – helmi

+0

申し訳ありませんが、私のコメントは前に完了していない.. :) – helmi

答えて

0

フォームの

おかげで、ドメインロジックを行うには正しい場所ではありません。
とにかく、データには現在のfu5LangTest値があります。あなたは、コントローラで

->add('fu5LangTest', 'choice', array(
     'choices' =>array(
      'poor compliance'=>0, 
      'negative'=>1, 
      'positive (recognizes at least 1 image reliably)'=>2, 
      'unknown if "lang test" performed'=>9 
     ), 
     // ... 

フォームの作成を使用する必要があります。

$object = new DataEFu5(); //or get it by your repository 
//this condition will be better in a service as it is business logic ;) 
if(!in_array($object->getFu5LangTest, [0,1,2])) { 
    $object->setFu5LangTest(9); 
} 

$form = $this->createForm(ObjectType, $object); 
+0

あなたの答えをありがとう。通常、私はこの種のロジックをMVCパターンで扱いますが、エンティティをロードするときには機能しません。フォームの関数でdirectliを試した理由を思い出します:)私はいくつかの例を見ました。 – helmi

関連する問題