2017-11-09 47 views
1

symfony 3のformTypeでEntityTypeを使用しています。 新しいフォームで表示されたときに、すべて正常に動作しますが、choicetype listeにはデータベースからのすべての値が含まれています。 しかし、私のデータベースから既存のデータを読み込むとき、選択肢リストはデータベースから値をロードせず、プレースホルダを表示します。 データベースにチェックインし、値が保存されています。 私のフォームは、私が2のリストにChoiceTypeにEntityTypeを変更しようとテストのために、このSymfony 3 - EntityType - レンダリングデータベースの値

->add('tester', EntityType::class, array(
       'class' => 'MyBundle:TesterList', 
       'query_builder' => function (EntityRepository $er) { 
        return $er->createQueryBuilder('u') 
        ->orderBy('u.name', 'ASC'); 
       }, 
       'choice_label' => 'name', 
       'choice_value' => 'name', 
       'required' => true, 
       'placeholder' => 'Select a tester', 
       )) 

のように見え、それが完璧に動作します。 EntityTypeの問題は何か分かりません。

編集: フィールドは、このように私の形式で表示されます。

{{ form_label(formHydraulicTest.testHeader.tester,'Tester' | trans) }} 
{{ form_widget(formHydraulicTest.testHeader.tester) }} 

エンティティTesterListは他の事業体とのあらゆる関係を持っていません。それは単なる名前のリストです。

EntityTypeは、保存しようとするとTesterListオブジェクトを返します。したがって、この関数をTesterList Entityに追加します。

public function __toString() { 
    return $this->name; 
} 

これで、テスターの名前だけが保存され、エンティティへのリンクは保存されませんでした。

+0

があなたのTesterListエンティティと自分のフォームに関するいくつかの情報を追加してください)。このコードには何も問題はないので、問題は別の場所にあるはずです。 –

答えて

0

一般的なEntityRepositoryでは、名前付きQueryBuilder 'u'を作成するだけで、どのエンティティをフェッチするのかわからない場合があります。実際のTesterListリポジトリが必要な場合があります。したがって、あなたのコードは次のようになります:

->add('tester', EntityType::class, array(
       'class' => 'MyBundle:TesterList', 
       'query_builder' => function (TesterListRepository $er) { 
        return $er->createQueryBuilder('u') 
           ->orderBy('u.name', 'ASC'); 
       }, 
       'choice_label' => 'name', 
       'choice_value' => 'name', 
       'required' => true, 
       'placeholder' => 'Select a tester', 
       )) 

もちろん、フォームクラスの上部にある使用ステートメントにTesterListRepositoryを追加します。

+0

私の問題で何も変わっていません。私は、TesterList Entityがフォームを保持するEntityにリンクされていない可能性があると考えていますか? – Etienne

+0

エンティティは、フォームでクエリービルダを作成するために、本質的にリレーションシップによってリンクされる必要はありません。 – ASOlivieri

0

私はそれを動作させる方法を見つけました、私はちょうどtwigでデフォルト値を選択します。私はそれが私の問題を解決するための最良の方法であることを確認していないこの

{{ form_label(formHydraulicTest.testHeader.tester,'Tester' | trans) }} 
        {{ form_widget(formHydraulicTest.testHeader.tester, { value : formHydraulicTest.testHeader.vars.value.tester}) }} 

のようにそれを更新しましたが、それは動作します。

関連する問題