diff --git a/Listener/UploadedFileListener.php b/Listener/UploadedFileListener.php index db50e2ddb3f67ca7a1bb21e0d276f6a590cd2555..cb37ea6d8f4fcf0402a12472a4006120bdd1c42b 100644 --- a/Listener/UploadedFileListener.php +++ b/Listener/UploadedFileListener.php @@ -23,6 +23,11 @@ class UploadedFileListener */ private $filesystem; + /** + * @var array + */ + private $scheduledDeletion = []; + /** * * @param Filesystem $filesystem @@ -58,7 +63,17 @@ class UploadedFileListener $this->filesystem->rename($changes['path'][0], $changes['path'][1]); } - /** Supprime le fichier disque lorsque l'on supprime l'entité. + /** Enregistre le chemin du fichier à supprimer. + * + * @param UploadedFileInterface $file + * @param LifecycleEventArgs $event + */ + public function preRemove(UploadedFileInterface $file, LifecycleEventArgs $event) + { + $this->scheduledDeletion[$file->getId()] = $file->getPath(); + } + + /** Supprime le fichier correspondant à l'UploadedFileInterface supprimé. * * @param UploadedFileInterface $file * @param LifecycleEventArgs $event @@ -66,9 +81,17 @@ class UploadedFileListener public function postRemove(UploadedFileInterface $file, LifecycleEventArgs $event) { try { - $this->filesystem->delete($file->getPath()); + $this->filesystem->delete($this->scheduledDeletion[$file->getId()]); } catch(FileNotFound $ex) { // NOOP } } + + /** + * Nettoie la liste des fichiers à supprimer. + */ + public function postFlush() + { + $this->scheduledDeletion = []; + } }