2016-09-29 69 views
0

我试图建立一个填充数据库实体的选择html元素。我需要select元素中的标签和值来自非默认实体值,所以我使用'choice_label'和'choice_value'选项。EntityType的choice_value正在删除重复值

问题是,具有重复'choice_value'(地区)值的任何实体正在被删除(替换?)。

这里是我的表单生成器:

$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' 
)); 

这是我所期望的:

<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> 

这就是我得到:

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

如果我删除 'choice_value'从表单生成器我得到的所有记录,但显然是错误的值。对于ChoiceType选择

回答

0

此前symfony3数组有如下因素构成:

$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,它应该可以工作。如果不是,您可以使用ChoiceType来代替EntityType并手动提供选择。