编辑表单提交symfony2时丢失了旧值文件


Lost old value file when edit form submit symfony2

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

但是我希望用户,如果他不上传新的图片,他就会得到旧的图片。

我得到旧的img与repository:

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(),
    ));
}

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

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

$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();
}