我在symfony 2应用程序上工作,我需要一些帮助才能解决以前从未遇到过的案例。
我的应用只有一个页面包含多个集团。让我们考虑一下动物的简单例子。在我的页面上,我有一个第一个集团,在那里我展示了具有所有特征的N只狗,然后是第二集团,我展示了兔子,然后是第三集团与猫等。
我还有一个管理页面,用户可以修改主页面上显示的数据。我遇到的问题是我必须使用只有一个页面来管理所有集团。这意味着我的管理页面上显示了N dog,M rabbits,P cats实体,当我提交表单时,Symfony必须删除,更新或插入数据库中的每个实体。
为此,我为每只动物创建了一个实体和一个formType,并为每个实体创建了一个名为Website的带有arraycollections的映射超类。
网站实体:
/**
* Website
* @ORM\MappedSuperclass()
*/
class Website
{
/**
* @var ArrayCollection
*/
private $dogs;
/**
* @var ArrayCollection
*/
private $rabbits;
/**
* @var ArrayCollection
*/
private $cats;
...
}
网站类型:
class WebsiteType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('dogs', 'collection', array(
'type' => new DogType(),
'allow_add' => true,
'allow_delete' => true
))
->add('rabbits', 'collection', array(
'type' => new RabbitType(),
'allow_add' => true,
'allow_delete' => true
))
->add('cats', 'collection', array(
'type' => new CatType(),
'allow_add' => true,
'allow_delete' => true
))
->add('save', 'submit')
;
}
}
在我的控制器中:
$manager = $this->getDoctrine()->getManager();
$dogs = $manager->getRepository('MyBundle:Dog')->findAll();
$rabbits = $manager->getRepository('MyBundle:Rabbit')->findAll();
$cats = $manager->getRepository('MyBundle:Cat')->findAll();
$website = new Website();
$website->setDogs($dogs);
$website->setRabbits($rabbits);
$website->setCats($cats);
$form = $this->createForm(new WebsiteType(), $website);
if ($form->handleRequest($request)->isValid()) {
$manager->persist($website);
$manager->flush();
}
return $this->render('MyBundle:Default:admin.html.twig', array(
'form' => $form->createView(),
'website' => $website
));
当我提交表单时,我有这个错误:
类型' MyBundle \ Entity \ Website'的给定实体 (MyBundle \ Entity \ Website @ 0000000040d8aeb900007fd77a072110)没有 identity / no id值设置。它无法添加到身份图中。
我该怎么办?