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')
;