Symfony 3.4 - ChoiceType 字段和相同的标签
Symfony 3.4 - ChoiceType field and same labels
好的,我读了很多关于这个的内容,主要是在这里:https://github.com/symfony/symfony/issues/19953
但是我还是得不到简单的解决办法;
我想用这个数据显示 select :
$data = [
2 => 'Label 1',
5 => 'Label 2',
6 => 'Label 1',
11 => 'Label 3',
]
我使用optgroup
,所以我可以有几个相同的标签(这里是Label 1
)。
但是如何在我的 ChoiceType 中显示它们?现在我有:
$builder
->add('type', ChoiceType::class, [
'label' => 'Type',
'required' => true,
'choices' => $options['data'],
'choice_label' => function ($value) {
return $value;
},
'choice_value' => function ($value) {
// how to get correct value here ?
},
])
此示例显示了我的 select 列表,其中包含重复项,但值类似于 0, 1, 2, 3 ....
。
如果我删除 choice_label
,它不会显示重复项。
我试过了:
# app/config.yml
framework:
form:
choices_as_values: false # defaults to true
但是这个选项似乎在 Symfony 3.4 上不存在。有什么线索吗?
当您将 ID 作为可能实体的值时,您的问题似乎 会发生。如果它们确实是实体,请使用 EntityType!!!
...也就是说...
好吧,symfony 本质上做的是它的选择数组以 [ label => value ]
的形式出现,这显然是处理重复标签时的一个问题。
我认为最简单的解决方法应该是:
$new = [
(object) ['value' => 2, 'label' => 'Label 1'],
(object) ['value' => 5, 'label' => 'Label 2'],
(object) ['value' => 6, 'label' => 'Label 1'],
(object) ['value' => 11, 'label' => 'Label 3'],
];
可以通过
相当快地生成
$new = [];
foreach($old_choices as $value => $label) {
$new[] = (object) ['value' => $value, 'label' => $label];
}
然后你可以设置
'choices' => $new,
'choice_label' => function($entry) { return $entry->label; },
'choice_value' => function($entry) { return $entry->value; },
(或 属性 路径)
我不太确定最后会返回什么 $form->getData()
,但我希望它是值。
如果您仍想对值进行分组,group_by
选项应该有效。
好的,我读了很多关于这个的内容,主要是在这里:https://github.com/symfony/symfony/issues/19953
但是我还是得不到简单的解决办法;
我想用这个数据显示 select :
$data = [
2 => 'Label 1',
5 => 'Label 2',
6 => 'Label 1',
11 => 'Label 3',
]
我使用optgroup
,所以我可以有几个相同的标签(这里是Label 1
)。
但是如何在我的 ChoiceType 中显示它们?现在我有:
$builder
->add('type', ChoiceType::class, [
'label' => 'Type',
'required' => true,
'choices' => $options['data'],
'choice_label' => function ($value) {
return $value;
},
'choice_value' => function ($value) {
// how to get correct value here ?
},
])
此示例显示了我的 select 列表,其中包含重复项,但值类似于 0, 1, 2, 3 ....
。
如果我删除 choice_label
,它不会显示重复项。
我试过了:
# app/config.yml
framework:
form:
choices_as_values: false # defaults to true
但是这个选项似乎在 Symfony 3.4 上不存在。有什么线索吗?
当您将 ID 作为可能实体的值时,您的问题似乎 会发生。如果它们确实是实体,请使用 EntityType!!!
...也就是说...
好吧,symfony 本质上做的是它的选择数组以 [ label => value ]
的形式出现,这显然是处理重复标签时的一个问题。
我认为最简单的解决方法应该是:
$new = [
(object) ['value' => 2, 'label' => 'Label 1'],
(object) ['value' => 5, 'label' => 'Label 2'],
(object) ['value' => 6, 'label' => 'Label 1'],
(object) ['value' => 11, 'label' => 'Label 3'],
];
可以通过
相当快地生成$new = [];
foreach($old_choices as $value => $label) {
$new[] = (object) ['value' => $value, 'label' => $label];
}
然后你可以设置
'choices' => $new,
'choice_label' => function($entry) { return $entry->label; },
'choice_value' => function($entry) { return $entry->value; },
(或 属性 路径)
我不太确定最后会返回什么 $form->getData()
,但我希望它是值。
如果您仍想对值进行分组,group_by
选项应该有效。