如何将数组的键放入Symfony的ChoiceType元素中

3

我正在尝试构建一个表单,将其实现在Twig模板中。为此,我使用了一些HTML元素。其中之一是Symfony组件中的ChoiceType。我创建了一个数组,将其传递给add方法。 我的愿望是在值属性中显示键,并在标签中显示数组的每个值,但我未能实现。

protected $lsa_types = array(
    'B' => 'Boolean',
    'D' => 'Date',
    'F' => 'Float',
    'I' => 'Integer',
    'L' => 'List',
    'S' => 'String',
    'T' => 'Text',
);

$form->add('type', ChoiceType::class, array('choices' => $this->lsa_types,
            'choice_label' => function ($value) {
                return $value;
            },
            'choice_value' => function ($key) {
                return $key;
            },
            'required' => true));

1
问题在于您尝试传递给闭包的数组中没有$value | $key。您可能需要重新设计您的数组,使其看起来像这样:$array = [ ["key"=>"B", "value"=>"布尔值"], ["key"=>"D", "value"=>"日期"],... ]; 然后您可以像这样传递给闭包:... "choice_label" => function($data) {return $data['value']; } 等等。 - Gunnrryy
尝试翻转您的数组,并将 "choices_as_values" => true 作为 ChoiceType 的选项。 - Massimiliano Arione
choices_as_values自Symfony的第三个版本起已被弃用。 - KubiRoazhon
1个回答

4

按照@Massimiliano的评论所说,但是不要包含choices_as_valueschoice_labelchoice_value选项:

protected $lsa_types = array(
    'B' => 'Boolean',
    'D' => 'Date',
    'F' => 'Float',
    'I' => 'Integer',
    'L' => 'List',
    'S' => 'String',
    'T' => 'Text',
);

...

$choices = array_flip($this->lsa_types);

$form
    ->add(
        'type', 
        ChoiceType::class, 
        array(
            'choices' => $choices,
            'required' => true
        )
    )
;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接