Commit 0011c57e authored by Guillaume Perréal's avatar Guillaume Perréal
Browse files

Gère proprement la suppression des fichiers.

Il est nécessaire d'enregistrer les chemins des fichiers *avant* la suppression pour s'assurer qu'on puisse les supprimer après.
Showing with 25 additions and 2 deletions
+25 -2
......@@ -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 = [];
}
}
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment