1

これに従って、ファイルをアップロードする機能を追加しましたが、少し問題があります。私は実際にセクションから関数をコピーしましたUsing Lifecycle Callbacks。class の代わりにDocument、次のクラスFriendがあります。

//...
/**
     * @Assert\File(maxSize="6000000")
     */
    public $picture;

    /**
     * @ORM\Column(type="string", length=255, nullable=true)
     */
    private $path;
//...

アップロードと編集は機能しますが、削除時に問題が発生します。2つのオプションが必要です- Remove the pictureそしてDelete the picture-最初のオプションは現在のパスのみを設定しnull、ファイルはファイルが保存されているフォルダーに残りますが、2番目のオプションはパスに設定されnull、ファイルも削除されます。

悪いニュースは、パスを にすることができないということnullです。ファイルは削除されますが、パスは残ります。

これはドキュメントの関数です:

   /**
     * @ORM\PostRemove()
     */
    public function removeUpload()
    {
        if ($picture = $this->getAbsolutePath()) {
            unlink($picture);
        }
    } 

public function getAbsolutePath()
    {
        return null === $this->path ? null : $this->getUploadRootDir().'/'.$this->path;
    }

これは私のコントローラーのアクションです:

public function removePictureAction($id)
    {
        $em = $this->getDoctrine()->getEntityManager(); 
         $friend = $em->getRepository('EMMyFriendsBundle:Friend')->find($id);
         $friend->removeUpload();
         $var=null;
         $friend->setPath($var);
         return $this->redirect($this->generateUrl('friend_id', array('id' => $id))); 
    }

しかし、パスはそのままです...それを削除して再びnullに設定するにはどうすればよいですか?

4

1 に答える 1

1

フレンド エンティティを永続化し、エンティティ マネージャをフラッシュする必要があります

于 2012-08-30T12:04:21.147 に答える