Symfony 4 CollectionType具有多个带有默认值的下拉菜单

时间:2019-02-12 14:10:05

标签: symfony symfony4

我已经创建了一个表单,但是现在我需要添加7个下拉列表作为数组,它们将被序列化存储在我实体的OpenTimes参数中。对于复选框,我对ChoiceType做了类似的工作。

我不知道如何使用CollectionType进行7种下拉菜单,只是它们没有显示在表单上。

$form->add('openTimes',CollectionType::class,[
            'entry_type'=>ChoiceType::class,
            'entry_options'=>[
                'attr'=>[
                    'class'=>'form-control selectpicker'
                ],
                'choices'=>[
                    '9:00'=>'9:00',
                    '10:00'=>'10:00'

                ]
            ]

        ]);

此代码显然不起作用,也不完全是我所需要的。

我需要在阵列中放置7个下拉菜单,所以一个下拉菜单将是星期一,星期二,星期三等,并且下拉菜单将包含一天中的某些时间,例如上午9点,上午10点等。

即使上面的代码确实起作用,也将使用相同的选择来复制它们,这很好,但是它们不会显示在表单上,​​而且我不确定如何告诉表单以此名称命名:

<select name="openTimes[mon]">
<select name="openTimes[tue]">

所以我的问题是:

  1. 当我使用{{form_widget(form.openTimes)}}

  2. 时,如何获得此下拉列表的集合以实际显示在表单上
  3. 如何将每个选择元素命名为其所需的名称,如星期几作为数组键?

1 个答案:

答案 0 :(得分:1)

首先,您应该转储序列化的数据逻辑,但是如果您真的想做所有事情,请使用JSON数据类型,因为该学说支持它。要以所需方式转换数据,可以使用数据转换器。对于表单呈现,您应该创建自己的自定义表单类型,例如“ OpenTimeType”,其中元素将为“ WeekDay”和“ Hour”,然后在主表单中可以创建表单类型为“ OpenTimeType”的名为“ OpenTimes”的集合。