Forms EntityType的choice_值正在删除重复值

Forms EntityType的choice_值正在删除重复值,forms,symfony,Forms,Symfony,我试图构建一个用数据库实体填充的selecthtml元素。我需要从非默认实体值中绘制select元素中的标签和值,因此我使用“choice_标签”和“choice_值”选项 问题是,任何具有重复“choice_value”区域值的实体都将被删除或替换 这是我的表单生成器: $builder->add('country', EntityType::class, array( 'class' => 'AcmeCheckoutBundle:Country', 'label

我试图构建一个用数据库实体填充的selecthtml元素。我需要从非默认实体值中绘制select元素中的标签和值,因此我使用“choice_标签”和“choice_值”选项

问题是,任何具有重复“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\u value”,我会得到所有记录,但显然是错误的值。

先前的symfony3 ChoiceType选项数组具有以下结构:

$choices = [
    'value1' => 'label1',
    'value2' => 'label2', ...
];
$choices = [
    'label1' => 'value1',
    'label2' => 'value2', ...
];
因此,当您使用元素填充此数组时,具有重复值的元素将被覆盖。自symfony2.7选项数组被重新设计以来,现在它的结构发生了变化:

$choices = [
    'value1' => 'label1',
    'value2' => 'label2', ...
];
$choices = [
    'label1' => 'value1',
    'label2' => 'value2', ...
];
现在可以有重复的值,但必须有唯一的标签。此结构在symfony2.7中引入,但默认情况下未启用,并在symfony3中默认使用

要在symfony2.7中启用此结构,可以使用选项选项作为值


实际上,EntityType symfony文档中没有提到此选项,但随着EntityType扩展ChoiceType,它应该可以工作。如果不是,则可以使用ChoiceType而不是od EntityType,并手动提供选项。

在symfony 3.x中,为了获得正确的选择值,必须使用“choice\u value”选项。否则,它将生成递增值。即.'choice_value'=>函数$item{return$item;},