Symfony 2以一种形式保留多个实体

时间:2016-01-18 16:03:06

标签: symfony

我在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值设置。它无法添加到身份图中。

我该怎么办?

0 个答案:

没有答案