File downloading from a Symfony controller
Published on 2020-01-29 • Modified on 2020-01-29
In this snippet, we will see how to force the download of a file by the browser from a Symfony controller. As you can see, it's very easy thanks to the file()
function which is part of the AbstractController
. First, we must get the project root dir, here I use the getProjectDir()
function of the kernel to build a file path, but we could also inject the kernel.project_dir
parameter in our controller. Unlike the other runnable snippets, when hitting the "run" button below, you won't see the results of the snippet but the browser will propose you to download my (perfect! 😁) Makefile. You can also check its content in this snippet.
<?php
declare(strict_types=1);
namespace App\Controller\Snippet;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpKernel\KernelInterface;
/**
* I am using a PHP trait to isolate each snippet in a file.
* This code should be called from a Symfony controller extending AbstractController (as of Symfony 4.2)
* or Symfony\Bundle\FrameworkBundle\Controller\Controller (Symfony <= 4.1).
* Services are injected in the main controller constructor.
*
* @property KernelInterface $kernel
*/
trait Snippet75Trait
{
public function snippet75(): BinaryFileResponse
{
return $this->file($this->kernel->getProjectDir().'/Makefile'); // That's it! 😁
}
}
Run this snippet More on Stackoverflow Read the doc Random snippet
Call to action
Did you like this post? You can help me back in several ways: (use the "reply" link on the right to comment or to contact me )
- Report any error/typo.
- Report something that could be improved.
- Like and repost!
- Follow me on Bluesky 🦋
- Subscribe to the RSS feed.
- Click on the More on Stackoverflow buttons to make me win "Announcer" badges 🏅.
Thank you for reading! And see you soon on Strangebuzz! 😉
