如何创建不同类型表单的集合?

时间:2015-10-05 06:07:19

标签: symfony symfony-forms

是否可以将不同类型的表单动态嵌入到单个集合中?

假设我有一份带有一些嵌入式文档的文档(使用ODM)。我需要为这些文档创建一个单独的表单。到目前为止还可以。但是我如何将它们放在表单的集合类型中,这样我就可以执行自动添加和删除表单的操作了?

或者我可以手动完成,没问题,但我可以在哪里放置代码?在表单上调用bindRequest之后?是否有机会从表单中删除已删除的项目,因为有可能我不会传递isValid方法。

到目前为止我学到的是,在创建表单之后无法修改表单。我有一个抽象的表单构建器,我将添加这些嵌入的文档。它不是一个集合,而是单独的表单,因为每个文档都有自己的表单类型。这是正确的方法还是我错了?

感谢您提供任何更正或建议

1 个答案:

答案 0 :(得分:0)

听起来您会为所有嵌入文档创建表单,然后将这些表单作为集合添加到文档的“父”表单中。通过这种方式,您的顶级表单将成为“集合”,然后您将从中获取嵌入数据。

因此,如果您的文档是A

class AType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $this->add('b', 'collection', [
            'type' => new BType(),
            'allow_add' => true,
            'allow_delete' => true,
        ])->add('c', 'collection', [
            'type' => new CType(),
            'allow_add' => true,
            'allow_delete' => true,
        ])->add('d', 'collection', [
            'type' => new DType(),
            'allow_add' => true,
            'allow_delete' => true,
        ]);
    }
}

表单实际上只是数据模型的交互式视图所以这听起来像是前进的方向,除非有什么阻止你这样做的事情?