【问题标题】:Symfony Form: CollectionType with different prototypesSymfony Form:具有不同原型的 CollectionType
【发布时间】:2016-02-25 18:18:03
【问题描述】:

有没有办法用 CollectionType 构建一个表单,并可以添加不同的原型。

背景:我想建立一个“Pagebuilder”。 功能与此类似,但我必须将其集成到现有应用程序中。

所以我必须添加不同的原型。不同的原型可以通过选择字段进行切换。

应该有多个具有不同表单域的表单。 例如。一个

  • 产品链接
  • 一个所见即所得的元素
  • 带有元数据的图像
  • 等等……

表单对用户来说应该尽可能简单。 所以我需要添加多个原型的可能性。

这已经可能(以及如何)?

【问题讨论】:

  • 您想将该表单集成到 Sulu Admin 中吗?或者那是一个完整的独立应用程序,截图只是你想要的可视化?
  • 这只是一个可视化。我喜欢 Sulu 的那个,并且希望能够在保持顺序和不同类型的同时连续添加 n 个不同的类型。到目前为止,我最关心的是对不同类型的验证。我可以手动执行此操作,但希望以某种方式像 CollectionType 一样自动执行此操作。

标签: php forms symfony doctrine


【解决方案1】:

编辑:虽然您的问题是关于 CollectionType,但在仔细查看您的屏幕截图后,我认为您只需要创建一个具有多个子表单的主表单,并根据用户选择显示适当的子表单(使用 javascript)。

【讨论】:

  • 但是我如何实现混合类型呢?所以它通过正确的子表单验证表单(使用原型添加js)?
  • 您不需要使用原型功能,因为您的表单是动态的,并且其中的某些部分被 javascript 隐藏/显示。
【解决方案2】:

如果您坚持使用 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],
        ]);
...

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-15
    • 1970-01-01
    相关资源
    最近更新 更多