Symfony表单,用于创建共享输入的实体集合

时间:2017-03-23 20:20:15

标签: symfony symfony-forms symfony-3.2

我需要创建一个表单来创建同一个实体的集合,但我不想为集合的每个条目重复所有字段(只有具有不同值的字段)。

想象一个Product实体:

class Product
{
    private $category;
    private $name;
    private $price;
}

我希望表单能够同时创建同一Product个多个category个实体。 因此,表单应包含一个category字段,以及nameprice的集合。

我的表单看起来像:

class ProductCollectionType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('category')
            ->add('products', CollectionType::class, array(
                'entry_type' => ProductType::class,
                'allow_add'  => true,
                'mapped'     => false,
            ))
        ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => Product::class,
        ));
    }
}

class ProductType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('name')
            ->add('price')
        ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => Product::class,
        ));
    }
}

任何人都知道是否有办法自动用父字段填充集合类型中的所有实体? (此示例中仅category

谢谢!

1 个答案:

答案 0 :(得分:0)

我会通过为产品提供不需要类别成员价值的表格来解决这个问题。然后创建一个未映射的字段以接收类别值。在提交后返回控制器后,将未映射的类别值应用于每个产品实体,然后处理/持久化/等。

结帐Symfony Forms page,搜索“已映射”,您将看到如何将未映射的字段添加到表单。