2016-09-22 63 views
0

我得到了一个带有字段文件的编辑表单(项目)来上传图片。 在我的数据库中,我有一列'img'来保存我的上传图片。编辑表单提交时丢失的旧值文件symfony2

但我想要的用户,如果他不上传新图片,他得到了老img。

我得到的是旧IMG与仓库:

public function editAction(Request $request, Projet $projet) 
{ 

    $editForm = $this->createForm('BBW\ProjetsBundle\Form\ProjetType', $projet); 
    $editForm->handleRequest($request); 
    $em = $this->getDoctrine()->getManager(); 

    $repository = $em->getRepository('BBWProjetsBundle:Projet'); 
    $old = $repository->findOneById($projet->getId()); // Données BDD Actuel 

    $old_img = $old->getImg(); 
    var_dump($old_img); // Got the old name for img in database - Ex: img.png 


    if ($editForm->isSubmitted() && $editForm->isValid()) { 

     var_dump($old_img); // Got null img .. 

     $file = $projet->getImg(); // New File upload - Here got null img (when i upload no file) 
     if($file != null){ // If i send an image - So the field img is not empty and got the new picture 
      // Want delete the old img - But not as i get the name of the old img, it doesn't remove 
      $fs = new Filesystem(); 
      $fs->remove($this->getParameter('uploads_dir_projets') . '/' . $old_img); // old_img = null :(
      $fileName = md5(uniqid()).'.'.$file->guessExtension(); 
      $file->move(// Move new file, etc .. 
       $this->getParameter('uploads_dir_projets'), 
       $fileName 
      ); 
      $projet->setImg($fileName); 
     }else{ 
      // In case i leave the field empty img - Here no new file is upload so file = null 
      // But When i submit the edit form, 
      // it replace the old value in database with null. I don't want it replace the old value if no new picture is upload 
      $projet->setImg($old_img); // Normally set the same name img 
     } 

     //$em->persist($projet); 
     //$em->flush(); 

     //$request->getSession()->getFlashBag()->add('success', 'Projet modifié avec succès'); 

     //return $this->redirectToRoute('bbw_projet_home'); 
    } 

    return $this->render('BBWProjetsBundle:projet:edit.html.twig', array(
     'projet' => $projet, 
     'edit_form' => $editForm->createView(), 
    )); 
} 

我不明白怎么做:/ 非常感谢帮助。

回答

0

检查一块下面的代码:如果没有要上传的图片,旧值保持不变:

$projet = $editForm->getData(); 

if (isset($projet['file']) && $projet['file'] instanceof UploadedFile) { 

    if ($projet['file']->getError() == 0) { 
     $fileName = md5(uniqid()).'.'.$file->guessExtension(); 
     // Move file... 

     $projet->setImg($fileName); 
    } else { 
     // Report/track error 
    } 

    $em->persist($projet); 
    $em->flush(); 
} 
+0

您好,感谢您的帮助。我尝试,但我得到数据库中的列img不能为空。也许我需要改变我的列参数? – OcB974

+0

显然。如果图片上传是可选的,则该字段应该接受空值。 –