首页 > 解决方案 > 是否可以使用 symfony 表单从请求创建多个实体?

问题描述

我使用 symfony 表单来处理 API 请求。我有 Event 实体和 EventForm 类。我需要制作批量 API 来一次创建多个事件。如何重用现有表单来创建多个事件实体?请求将如下所示:

{
    "events": [
        {
            "title": "Event One",
            "description": "",
            "startsAt": "2019-08-16T16:00:00+0300",
            "endsAt": "2019-08-16T17:00:00+0300",
            "allDay": false
        },
        {
            "title": "Event Two",
            "description": "",
            "startsAt": "2019-08-16T16:00:00+0300",
            "endsAt": "2019-08-16T17:00:00+0300",
            "allDay": false
        }
    ]
}

我阅读了有关嵌入https://symfony.com/doc/3.4/form/form_collections.html的表单,看来这不是我的情况,因为我不需要将多个子实体设置为父实体,而只需创建多个事件。

这是我的 EventForm 课程:

class EventForm extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('title', TextType::class, [
                'required' => true,
            ])
            ->add('description', TextType::class, [
                'required' => false,
                'empty_data' => '',
            ])
            ->add('startsAt', DateTimeType::class, [
                'required' => true,
                'widget'   => 'single_text',
            ])
            ->add('endsAt', DateTimeType::class, [
                'required' => true,
                'widget'   => 'single_text',
            ])
            ->add('allDay', CheckboxType::class, [
                'required' => true,
            ])
        ;
    }
}

我创建 BulkEventForm 类:

class BulkEventForm extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('events', CollectionType::class, [
                'entry_type' => EventForm::class
            ])
        ;
    }
}

我希望我得到一个数组或事件集合,但是在处理请求表单数据之后是:

[
    'events' => []
]

是否可以在不循环请求和创建多个表单的情况下获得预期的结果?

标签: phpsymfonydoctrinesymfony-forms

解决方案


推荐阅读