我正在尝试构建一个填充有数据库实体的选择 html 元素。我需要从非默认实体值中提取 select 元素中的标签和值,因此我使用“choice_label”和“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”,我会得到所有记录,但显然值错误。
最佳答案
之前的 symfony3 ChoiceType 选择数组具有以下结构:
$choices = [
'value1' => 'label1',
'value2' => 'label2', ...
];
因此,当您用元素填充此数组时,具有重复值的元素将被覆盖。由于 symfony2.7 选择数组被重新设计,现在它具有反转的结构:
$choices = [
'label1' => 'value1',
'label2' => 'value2', ...
];
现在您可以有重复的值,但必须有唯一的标签。该结构是在 symfony2.7 中引入的,但默认不启用,在 symfony3 中默认使用。
要在 symfony2.7 中启用此结构,您可以使用选项 choices_as_values
( http://symfony.com/doc/2.7/reference/forms/types/choice.html#choices-as-values )。
实际上 EntityType symfony 文档中没有提到这个选项,但由于 EntityType 扩展了 ChoiceType 它应该可以工作。如果不是,您可以使用 ChoiceType 代替 EntityType 并手动提供选择。
关于forms - EntityType 的 choice_value 正在删除重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39768871/