Symfony 5 | Retourner une image via une route d’un controller

Mise en place de la route

Tout d’abord il vous faudra un controller avec une route prête à recevoir un nom d’image, et ensuite retourner l’image.

Ensuite il faut installer le package suivante : composer require symfony/mime qui va permettre à Symfony de détecter automatiquement le mime type à renvoyer.

Il faut également importer ces packages en haut du controller

use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpFoundation\JsonResponse;

Mon arborescence de fichier 

Mon image se trouve dans le dossier uploads

Une fois le Controller et la route prête voici le code à saisir pour permettre de retourner une image sous Symfony 5 :

    /**
     * @Route("/img-route/{img}", name="img_route")
     * Une route avec un paramètre
     */
    public function index($img): Response
    {
        //Récupération du dossier racine grace au kernel et ensuite ajout de l'emplacement du 
        //fichier
        $filename = $this->getParameter('kernel.project_dir') . '/uploads/' . $img;
        //Si le fichier existe alors on le renvoi, sinon retour 404
        if (file_exists($filename)) {
            //retour d'un new BinaryFileResponse avec le nom du fichier
            return new BinaryFileResponse($filename);
        } else {
            return new JsonResponse(null, 404);
        }
    }

Ce tutoriel est maintenant terminé, merci d’avoir lu et n’hésitez pas à partager 🙂