2016-09-29 5 views
0

データベースエンティティが設定された選択されたhtml要素を作成しようとしています。 select要素のラベルと値をデフォルト以外のエンティティ値から引き出す必要があるので、 'choice_label'と 'choice_value'オプションを使用します。EntityTypeのchoice_valueが重複した値を削除しています

問題は、重複した 'choice_value'(テリトリ)値を持つエンティティがすべて削除されていることです(置き換えられますか?)。私は 'choice_value' を削除した場合

<select> 
    <option value="1">United Kingdom</option> 
    <option value="2">Germany</option> 
    <option value="3">Canada</option> 
</select> 

<select> 
    <option value="1">United Kingdom</option> 
    <option value="2">France</option> 
    <option value="2">Germany</option> 
    <option value="3">Brazil</option> 
    <option value="3">Canada</option> 
</select> 

これは私が取得していますものです:

$builder->add('country', EntityType::class, array(
    'class' => 'AcmeCheckoutBundle:Country', 
    'label' => 'Country', 
    'query_builder' => function(EntityRepository $er) { 
     return $er->createQueryBuilder('c') 
      ->orderBy('c.name', 'ASC'); 
    }, 
    'choice_label' => 'name', 
    'choice_value' => 'territory' 
)); 

これは私が期待するものである:

は、ここに私のフォームビルダですフォームビルダーからはすべてのレコードが得られますが、明らかに間違った値があります。 ChoiceTypeの選択肢の

答えて

0

前symfony3配列は、構造をfolowingた:あなたはあなたの要素をこの配列を埋めるとき

$choices = [ 
    'value1' => 'label1', 
    'value2' => 'label2', ... 
]; 

だから、重複する値を持つ要素が上書きされます。選択肢のsymfony2.7アレイが再加工されたため、今では構造が反転しています

$choices = [ 
    'label1' => 'value1', 
    'label2' => 'value2', ... 
]; 

今、あなたは、重複する値を持つことができますが、ユニークなラベルを持っている必要があります。この構造はsymfony2.7で導入されましたが、デフォルトでは有効になっておらず、symfony3ではデフォルトで使用されています。

symfony2.7でこの構造体を有効にするには、オプションchoices_as_valueshttp://symfony.com/doc/2.7/reference/forms/types/choice.html#choices-as-values)を使用できます。

実際には、このオプションはEntityType symfonyのドキュメントでは言及されていませんが、EntityTypeがChoiceTypeを継承しているので動作するはずです。そうでない場合は、EntityTypeの代わりにChoiceTypeを使用して手動で選択肢を提供できます。

関連する問題