Ver índice de contenidos del libro

2.12. Enviando archivos

Silex define el atajo sendFile() para enviar archivos como respuesta de una petición (cuando un archivo es público, es más eficiente acceder a el directamente a través del servidor web).

El método sendFile() admite cuatro argumentos: la ruta del archivo, el código de estado, las cabeceras y la forma en la que se entrega el archivo (mostrarlo en el navegador o forzar su descarga). Técnicamente este método crea una respuesta especial de tipo BinaryFileResponse:

$app->get('/files/{path}', function ($path) use ($app) {
    if (!file_exists('/base/path/' . $path)) {
        $app->abort(404);
    }
 
    return $app->sendFile('/base/path/' . $path);
});

Usando la API de la clase BinaryFileResponse puedes modificar la respuesta antes de enviarla al usuario:

return $app
    ->sendFile('/base/path/' . $path)
    ->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, 'pic.jpg')
;