2013-05-10 34 views
1

我有一個具有文件實體的ManyToOne的實體。未找到Symfony2實體 - 在關係中上載文件

我的問題是當我嘗試刪除。

這是我如何創建:

/** 
* Creates a new Catalogo entity. 
* 
* @Route("/create", name="catalogo_create") 
* @Method("POST") 
* @Template("BWSBajaCupcakesBundle:Catalogo:new.html.twig") 
*/ 
public function createAction(Request $request) 
{ 
    $entity = new Catalogo(); 
    $file = new Archivo(); 

    $form = $this->createForm(new CatalogoType(), $entity); 
    $form->bind($request); 

    $file_form = false; 

    if($form['file']->getData()){ 
     $file_form = $form['file']; 
     //unset($form['file']); 
    } 
    if ($form->isValid()) { 
     $em = $this->getDoctrine()->getManager(); 
     $em->persist($entity); 

     if($file_form){ 
       $tipoImagen = $em->getRepository('BWSBajaCupcakesBundle:TipoArchivo')->find(1); 
       $file->setFile($file_form->getData()); 
       $file->setPrincipal(true); 
       $file->setTipo($tipoImagen); 
       $file->setFechaCaptura(date_create(date("Y-m-d H:i:s"))); 
       $file->upload(); 
       $em->persist($file); 
       $entity->setImagen($file); 
     } 

     $em->flush(); 

     return $this->redirect($this->generateUrl('catalogo_show', array('id' => $entity->getId()))); 
    } 

    return array(
     'entity' => $entity, 
     'form' => $form->createView(), 
    ); 
} 

這是我如何刪除:

/** 
    * Deletes a Catalogo entity. 
    * 
    * @Route("/{id}/delete", name="catalogo_delete") 
    * @Method("POST") 
    */ 
    public function deleteAction(Request $request, $id) 
    { 
     $form = $this->createDeleteForm($id); 
     $form->bind($request); 

    if ($form->isValid()) { 
     $em = $this->getDoctrine()->getManager(); 
     $entity = $em->getRepository('BWSBajaCupcakesBundle:Catalogo')->find($id); 

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

     $em->remove($entity); 
     $em->flush(); 
    } 

    return $this->redirect($this->generateUrl('catalogo')); 
} 

這是我的關係:

/** 
* @ORM\ManyToOne(targetEntity="BWS\BajaCupcakesBundle\Entity\Archivo", cascade={"all"}) 
* @ORM\JoinColumn(name="imagen_id", referencedColumnName="id") 
*/ 
private $imagen; 

我不明白,我這樣做在我的其他Symfony應用程序中,從來沒有遇到過這個問題。

在此先感謝您的幫助。

乾杯

+1

面對手掌,我在我的File實體中有一個PostRemove回調循環的removeUpload ...我在刪除實體之前使用名稱和webpath(即在已刪除的實體中)可以完成PostRemove。所以基本上我調用了一個webpath和文件名,dindt在entitymanager中退出。希望這個蠟燭有用。 – 2013-05-10 02:39:59

回答

5

雖然你有在您的評論的答案,我因子評分我給在任何情況下的代碼(基於食譜文檔實體):

/** 
* Pre remove upload 
* 
* @ORM\PreRemove() 
*/ 
public function preRemoveUpload() 
{ 
    $this->temp = $this->getAbsolutePath(); 
} 

/** 
* Remove upload 
* 
* @ORM\PostRemove() 
*/ 
public function removeUpload() 
{ 
    if ($this->temp) { 
     unlink($this->temp); 
    } 
}