Voici un petit article rapide pour apporter une solution à cette question : « Comment forcer le téléchargement d’un fichier avec Symfony ».
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…
Super ! Merci pour cet article.
Avec cette méthode, le téléchargement de fichiers avec Symfony fonctionne parfaitement chez moi également !