嵌入式表单集合不会删除项目Symfony2

时间:2014-03-05 09:59:23

标签: php forms symfony orm doctrine-orm

我有一个奇怪的问题。我正在开发一个基于Symfony 2的Web应用程序,我根据Symfony Cookbook条目将一个from集合嵌入到另一个集合中(This:http://symfony.com/doc/2.3/cookbook/form/form_collections.html)。 最近我将我的bundle的映射数据从yaml更改为注释。 问题从这里开始。坚持新元素工作正常,但我不能删除任何东西。

我有一个Page实体和一个Image实体,它们有很多关系。我将图片上传表单集合嵌入到页面的表单中。

旧映射无效,新映射有效但不起作用。

以下是我的新旧映射:

old yml:

页面:

manyToMany:
        images:
            targetEntity: Image
            inversedBy: page
            cascade: [persist, remove]
            orderBy:
                image_order: DESC

图像上没有映射

新映射:

页:

 /**
     * @ORM\ManyToMany(targetEntity="Image", inversedBy="pages", cascade={"persist", "remove"})
     * @ORM\JoinTable(name="page_image",
     *      joinColumns={@ORM\JoinColumn(name="page_id", referencedColumnName="id")},
     *      inverseJoinColumns={@ORM\JoinColumn(name="image_id", referencedColumnName="id")}
     *      )
     * @ORM\OrderBy({"image_order" = "DESC"})
    */
    protected $images;

图像:

/**
      * @ORM\ManyToMany(targetEntity="Page", mappedBy="images")
      */
    protected $pages;

处理编辑表单提交的操作:

/**
     * Edits an existing Page entity.
     *
     * @Route("/{id}/update", name="page_update")
     * @Method("post")
     * @Template("AdamantiumBackendBundle:Page:edit.html.twig")
     */
    public function updateAction($id)
    {
        $em = $this->getDoctrine()->getManager();
        $entity = $em->getRepository('AdamantiumBackendBundle:Page')->find($id);

        if (!$entity) {
            throw $this->createNotFoundException('Unable to find Page entity.');
        }

        $editForm   = $this->createForm(new PageType(), $entity);
        $deleteForm = $this->createDeleteForm($id);

        $request = $this->getRequest();

        $editForm->handleRequest($request);

        if ($editForm->isValid()) { 

            $em->persist($entity);
            $em->flush();                   
            apc_clear_cache('user');            
            return $this->redirect($this->generateUrl('page_edit', array('id' => $id)));
        }

        return $this->render('AdamantiumBackendBundle:Page:edit.html.twig',array(
            'entity'      => $entity,
            'edit_form'   => $editForm->createView(),
            'delete_form' => $deleteForm->createView(),
        ));
    }

来自页面表单的嵌入式集合:

->add('images', 'collection', array('type' => new ImageType(),
                                            'allow_add' => true,
                                            'allow_delete' => true,
                                            'by_reference' => false,
                                            'options' => array('data_class' => 'Adamantium\BackendBundle\Entity\Image'),
                                        ))

我有添加和删除图像方法,我有getter和setter。 (正如我之前所说的,无效的yml映射一切正常)

所以请告诉我我错过了什么或我做错了什么。

谢谢!

0 个答案:

没有答案