Cómo incluir el path completo de un fichero en un @Route GET como parámetro?

Buenos días a todo el foro

Quisiera poner un enlace para descargar un fichero (no mostrarlo), como parámetro tengo el path donde encontrarlo, por ejemplo "/uploads/usuario/fichero.pdf". Además tengo interés en que la petición se haga mediante GET y no POST.

He probado en el controler: @Route("download=file={file}", name="download") Pero, ¿y con twig? Al tratar de pasar el parámetro me da un error al parsear el path.

¿Cómo es la mejor manera de hacer esto?

Gracias de antemano

Respuestas

#1

Hola, el secreto creo que esta en el parámetro requeriments de @Route Os dejo el código por si os puede ayudar:

/**
     * @Route("/download/{file}", name="downloadfile", requirements={"file"=".+"})
     * 
     * @Method({"GET"})
     */
    public function downloadFileAction($file){
        $file = $this->container->getParameter('path_uploads').'/'.$file;
        if (!is_file($file)) {           
            // Respuesta.
            $this->addFlash('result','No se encuentra el archivo que desea bajar');
            return false;
        }
        $response = new Response(file_get_contents($file));
        $response->setStatusCode(200);
        $response->headers->set('Content-Type', 'application/pdf');
        $response->headers->set('Content-Description', 'Submissions Export');
        $response->headers->set('Content-Disposition', 'attachment; filename='. basename($file));
        $response->headers->set('Content-Transfer-Encoding', 'base64');
        $response->headers->set('Pragma', 'no-cache');
        $response->headers->set('Expires', '0');
        return $response;
    }