在Symfony2表单中添加额外的空嵌入表单到集合

时间:2013-08-01 11:35:33

标签: forms symfony associations entity

在控制器中,我创建了一个表单集合,以便一次编辑多个类别实体:

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:必须管理传递给选择字段的实体。   也许坚持他们在实体经理?

但是,坚持使用它们不是一种选择,因为我会在数据库中存储许多新实体,无论它们是否有意义。基本上,我想提供额外的空项表单以供选择填写。我不想添加额外的空项......

0 个答案:

没有答案