Symfony Form集合导致实体被设置在其自身内部

时间:2014-10-15 16:01:27

标签: symfony doctrine formbuilder

在集合中使用实体时,实体将设置在我调用的属性上。

这种有道理,ProductType说"嘿,你想改变标题吗?确定的人,这里列出了你想要的那些实体" - 并在提交时,它将实体设置为标题。所以这看起来不是实现我想要的正确方法(为用户分配n个产品),但它似乎是推荐的方式:

http://symfony.com/doc/current/cookbook/form/form_collections.html

所以我让User与Product:

具有单向ManyToMany关系
/**
 * @ORM\ManyToMany(targetEntity="Product")
 */
protected $products;

用户表单有一个集合,每个集合都是一个实体字段类型 - 用户表单类型:

...
->add('products', 'collection', array('type'=>new ProductType()))

在ProductType中我有:

$builder->add('title', 'entity', array(
            'class' => 'ThingsStuffBundle:product',
            'property' => 'title',
            'required'  => false,
            'empty_value' => 'product',
            'query_builder' => function(EntityRepository $er) {
                return $er
                    ->createQueryBuilder('p')
                    ->orderBy('p.title', 'ASC');
            },
        ));

哪个有效。有点。当我提交表单时,似乎我更新了产品标题,而不是将其用作选择数组。

提交的数据:

$userEntity->products[
    productEntity{
        id = 1,
        title = productEntity{
            id = 1,
            title = 'balls'
        }
    },
    productEntity{
        id = 2,
        title = productEntity{
            id = 2,
            title = 'suck'
        }
    }
]

1 个答案:

答案 0 :(得分:0)

如果您想构建此类添加/删除集合

->add('products', 'collection', array('type'=>new ProductType(),
'allow_add' => true,
'allow_delete' => true
))

然后在ProductType中:

$builder->add('product', 'entity', array(
        'class' => 'ThingsStuffBundle:product'
    ));

注意:如果您按照文档中的说明添加相应的前端javascript,则此添加/删除将起作用 想象一下像你在其中添加或删除产品的包的集合。