- Classe :
AppoloDev\SFToolboxBundle\Response\ZipResponse - Fichier source :
src/Response/ZipResponse.php - Étend :
Symfony\Component\HttpFoundation\BinaryFileResponse
Réponse HTTP qui zippe à la volée une liste de fichiers et propose l'archive résultante en téléchargement. Construit un vrai fichier zip temporaire sur disque (sys_get_temp_dir()), puis délègue le service à BinaryFileResponse.
__construct(array $files, string $zipName = 'export.zip', int $status = 200, array $headers = [], bool $public = true, string $contentDisposition = ResponseHeaderBag::DISPOSITION_ATTACHMENT, bool $autoEtag = false, bool $autoLastModified = true)
$files: tableau deSymfony\Component\HttpFoundation\File\Fileà inclure dans l'archive.$zipName: nom de fichier proposé au téléchargement (défautexport.zip).$status,$headers: réglages HTTP standards.$public,$contentDisposition,$autoEtag,$autoLastModified: transmis tels quels au constructeur deBinaryFileResponse.
Lève une Symfony\Component\HttpFoundation\File\Exception\FileException si l'archive zip ne peut pas être créée (ex: permissions insuffisantes sur le dossier temporaire).
⚠️ Le fichier zip est créé danssys_get_temp_dir()avec un nom généré paruniqid(), mais n'est jamais supprimé automatiquement après l'envoi de la réponse — à garder en tête sur un export très fréquent (nettoyage périodique du dossier temporaire à prévoir côté infra si besoin).
use AppoloDev\SFToolboxBundle\Response\ZipResponse;
use Symfony\Component\HttpFoundation\File\File;
#[Route('/admin/documents/export', name: 'admin_documents_export')]
public function exportZip(DocumentRepository $repository): ZipResponse
{
$files = array_map(
fn (Document $doc) => new File($doc->getFilePath()),
$repository->getQB()->getResults()
);
return new ZipResponse($files, 'documents.zip');
}- Response/CsvFileResponse — équivalent pour un export CSV unique.
- Domain/Entity/Concern/FileUpload — interface typique des entités dont les fichiers sont zippés ainsi.