UploadedFileListener.php 1.60 KiB
<?php
/*
 * Copyright (C) 2015 IRSTEA
 * All rights reserved.
 */
namespace Irstea\FileUploadBundle\Listener;
use Doctrine\ORM\Event\LifecycleEventArgs;
use Gaufrette\Filesystem;
use Irstea\FileUploadBundle\Entity\UploadedFile;
/**
 * Listener qui traite les opérations sur les fichiers uploadés.
class UploadedFileListener
    /**
     * @var Filesystem
    private $filesystem;
    /**
     * @param Filesystem $filesystem
    public function __construct(Filesystem $filesystem)
        $this->filesystem = $filesystem;
    /** Passe le filesystem à l'entité.
     * @param UploadedFile $file
     * @param LifecycleEventArgs $event
    public function postLoad(UploadedFile $file, LifecycleEventArgs $event)
        $file->setFilesystem($this->filesystem);
    /** Renomme le fichier disque lorsque l'on change l'attribut 'path'.
     * @param UploadedFile $file
     * @param LifecycleEventArgs $event
    public function postUpdate(UploadedFile $file, LifecycleEventArgs $event)
        $changes = $event->getEntityManager()->getUnitOfWork()->getEntityChangeSet($file);
        if(!isset($changes['path'])) {
            return;
        $this->filesystem->rename($changes['path'][0], $changes['path'][1]);
    /** Supprime le fichier disque lorsque l'on supprime l'entité.
     * @param UploadedFile $file
     * @param LifecycleEventArgs $event
    public function postRemove(UploadedFile $file, LifecycleEventArgs $event)
        $this->filesystem->delete($file->getPath());