Symfony – Forcer le téléchargement

Voici un petit article rapide pour apporter une solution à cette question : « Comment forcer le téléchargement d’un fichier avec Symfony ».

symfony-logo

Je devais mettre en place aujourd’hui cette fonctionnalité pour un site et plus précisement pour une messagerie avec pièce jointe.

Après quelques essais personnels qui ont été un échec pour forcer le download de mon fichier, j’ai tenté de trouver des réponses sur le web. Bien évidement et comme toujours, plusieurs personnes avaient le même problème que moi ;-) Mais les réponses proposées n’étaient pas à la hauteur de mes espérances… cela ne fonctionnait toujours pas.

Et finalement, je suis tombé sur ce site : LoaderTool

Ils mettent à disposition une classe PHP pour symfony permettant de forcer le téléchargement très simplement et efficacement.

Il suffit de copier cette classe loadertool-class.php dans un de vos dossier dans le répertoire lib de votre projet Symfony, et ensuite créé une action de téléchargement sur un de vos modules :

public function executeDownload(sfWebRequest $request)
{
  //Dans mon cas, je récupère ici mon objet message.
  $this->forward404Unless($message = Doctrine::getTable('messenger')->find($request->getParameter('id'));

  //J'initialise la variable $file avec le chemin vers mon fichier
  $file = sfConfig::get('sf_upload_dir').'/messenger_pj/'.$message->getAttachment();

  //Je lance le téléchargement avec LoaderTool
  LoaderTool::downloadContent($file);
  exit();
}

Rien de plus simple. Il existe d’autres options pour cette classe que je vous laisse découvrir.

To be continued…

Catégorie : Symfony | #, # | Permalink

1 commentaire

  1. SergioRamos

    Super ! Merci pour cet article.
    Avec cette méthode, le téléchargement de fichiers avec Symfony fonctionne parfaitement chez moi également !

Laisser un commentaire

*