Téléchargement d'un fichier depuis un contrôleur Symfony

Publié le 29/01/2020 • Mis à jour le 29/01/2020


English language detected! 🇬🇧

  We noticed that your browser is using English. Do you want to read this post in this language?

Read the english version 🇬🇧 Close

Dans ce snippet, nous allons voir comment forcer le téléchargement d'un fichier dans le navigateur à partir d'un contrôleur Symfony. Comme vous pouvez le voir c'est facile grâce à la fonction file() du contrôleur abstrait (AbstractController). Tout d'abord nous récupérons le chemin de la racine du projet. Ici, j'utilise la fonction getProjectDir() du noyau pour construire ce chemin mais nous pourrions aussi injecter le paramètre kernel.project_dir dans notre contrôleur. Contrairement aux autres snippets exécutables, si vous appuyez sur le bouton "exécuter" ci-dessous, vous ne verrez pas de page montrant les résultats du snippet mais votre navigateur vous proposera de télécharger mon Makefile (parfait ! 😁). Vous pouvez aussi consulter son contenu dans ce snippet.


<?php declare(strict_types=1);

// src/Controller/Snippet/Snippet75Trait.php

namespace App\Controller\Snippet;

use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpKernel\KernelInterface;

/**
 * J'utilise un trait PHP afin d'isoler chaque snippet dans un fichier.
 * Ce code doit être apellé d'un contrôleur Symfony étendant AbstractController (depuis Symfony 4.2)
 * ou Symfony\Bundle\FrameworkBundle\Controller\Controller (Symfony <= 4.1).
 * Les services sont injectés dans le constructeur du contrôleur principal.
 *
 * @property KernelInterface $kernel
 */
trait Snippet75Trait
{
    public function snippet75(): BinaryFileResponse
    {
        return $this->file($this->kernel->getProjectDir().'/Makefile'); // That's it! 😁
    }
}

 Exécuter le snippet  Plus sur Stackoverflow   Lire la doc  Snippet aléatoire