Symfony表单:具有不同原型的CollectionType

3
有没有一种方法可以使用CollectionType构建一个表单,并具有添加不同原型的可能性。
背景:我想构建一个“页面构建器”。 功能类似于此,但我必须将其集成到现有应用程序中。

Pagebuilder with SuluCMF

所以我必须添加不同的原型。可以使用选择字段切换不同的原型。
应该有多个具有不同表单字段的表单。 例如:一个用于
  • 链接到产品
  • 单个所见即所得元素
  • 具有元数据的图像
  • 等等...
表格应尽可能简单易用。 因此,我需要添加多个原型的可能性。
这已经是可能的了吗(如何实现)?

你想将这个表单集成到Sulu管理后台中吗?还是它是一个完全独立的应用程序,截图只是你想要的可视化效果? - Daniel Rotter
这只是一个可视化效果。我喜欢Sulu的那个,并希望能够在一行中添加n种不同类型,同时保持顺序和不同类型的持久性。到目前为止,我最担心的是对不同类型进行验证。我可以手动完成这个任务,但是希望能够像CollectionType那样以某种方式自动化它。 - Patrick
2个回答

0
编辑:尽管你的问题是关于CollectionType的,但在仔细查看了你的截图后,我认为你只需要创建一个主表单和多个子表单,并根据用户的选择显示相应的子表单(使用JavaScript)。

但是我如何实现混合类型?这样它能够通过正确的子表单验证添加到表单中的(使用原型添加的)表单? - Patrick
你不需要使用原型功能,只因为你的表单是动态的,并且其中的一些部分是通过JavaScript隐藏/显示的。 - Karolis

0

如果你坚持使用CollectionType(我在你的截图中没有看到理由),那么你可以这样做:

    $builder->add('entity1', CollectionType::class, [
        'label' => 'entity.recipe.entity1',
        'entry_type' => \AppBundle\Form\Type\Entity1Type::class,
        'allow_add' => true,
        'allow_delete' => true,
        'prototype' => true,
        'prototype_name' => '__EntityId__',
        'entry_options'  => ['required'  => false],
        ]);

    $builder->add('entity2', CollectionType::class, [
        'label' => 'entity.recipe.entity2',
        'entry_type' => \AppBundle\Form\Type\Entity2Type::class,
        'allow_add' => true,
        'allow_delete' => true,
        'prototype' => true,
        'prototype_name' => '__EntityId__',
        'entry_options'  => ['required'  => false],
        ]);
...

添加任意数量的实体类型,每个类型都将是一个包含零个或多个项目的集合。


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