我有一个奇怪的问题。我正在开发一个基于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映射一切正常)
所以请告诉我我错过了什么或我做错了什么。
谢谢!