これに従って、ファイルをアップロードする機能を追加しましたが、少し問題があります。私は実際にセクションから関数をコピーしました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に設定するにはどうすればよいですか?