在控制器中,我创建了一个表单集合,以便一次编辑多个类别实体:
private function createCategoriesCrudForm($categoryCollection)
{
$new_category = new reportcategory();
$new_category->setName('New category?');
$categoryCollection->addCategory($new_category);
$form = $this->createFormBuilder($categoryCollection)
->add('categories', 'collection', array
(
'required' => false,
'allow_add' => true,
'prototype' => true,
'prototype_name' => 'proto_category',
'type' => new reportCategoryType()
))->getForm();
return $form;
}
如您所见,我为每个现有类别创建表单,并为可能用于添加新类别的空表单创建表单。
每个类别都有许多项目。这些项目以reportCategoryType()形式加载,它们也是表单的集合。它们是这样添加的:
->add('items', 'collection', array
(
'required' => false,
'allow_add' => true,
'prototype' => true,
'prototype_name' => 'proto_item',
'type' => new reportItemType()
))
这一切都有效,但现在我想将一个空的reportItemType()表单添加到每个类别的items集合中。这也是为了填写它,并在该类别中添加一个额外的项目。
因此我的问题是: 如何在表单中的集合中添加额外的空项?
正如您将注意到的,对于类别我自己创建集合,其中Symfony2根据表单定义中的关联(OneToMany)处理每个类别的项集合。
我知道有一种使用jQuery和原型的方法,但我的目标是避免这种情况。
增加:
我想到的一个解决方案是循环遍历每个类别,获取其项目,添加空项目,然后将每个类别添加到categoryCollection。在代码中,这看起来像这样:
$cats = $this->getEm()->getRepository(....)->findAll();
$categoriesCollection = new reportCategoryCollection();
foreach ($cats as $cat)
{
$new_item = new reportItem();
$new_item->setName("New item?");
$cat->addItem($new_item);
foreach ($cat->getItems() as $item)
$categoriesCollection->addCategory($cat);
}
但这会导致错误:
FormException:必须管理传递给选择字段的实体。 也许坚持他们在实体经理?
但是,坚持使用它们不是一种选择,因为我会在数据库中存储许多新实体,无论它们是否有意义。基本上,我想提供额外的空项表单以供选择填写。我不想添加额外的空项......