0

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

想象一个Product实体:

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

我想要一个表单来同时创建多个Product相同的实体category。所以表单应该有一个字段,以及一个andcategory的集合。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在本例中)

谢谢!

4

1 回答 1

0

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

查看Symfony 表单页面,搜索“mapped”,您将看到如何将未映射的字段添加到表单。

于 2017-03-23T20:39:00.943 回答