Téléchargement d'un fichier depuis un contrôleur Symfony
Publié le 29/01/2020 • Actualisé le 29/01/2020
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);
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