Задача программной отдачи файла может встретиться довольно часто, но не многие знают, что в Yii2 есть встроенный методы, помогающие решить проблему отдачи файла в браузер на скачивание. В этой короткой заметке — пример решения задачи. Поехали!
В принципе, все средства описаны в документации. Я лишь приведу несколько примеров и пояснений.
Наиболее полезными и часто используемыми являются два метода:
— sendFile
— sendContentAsFile
Первый из них отдает в браузер файл, физически существующий на сервере.
Второй — позволяет отдать в браузер некое сгенерированное содержимое (первый параметр) под условным названием (второй параметр). К примеру некий отчет за определенный период — согласитесь, глупо его хранить на сервере, если у Вас тысячи клиентов. Генерируем и отдаём сразу на скачивание.
Пример скачивания выглядит так:
public function actionDownload() { $path = \Yii::getAlias('@uploads') ; $file = $path . '/some-file.pdf'; if (file_exists($file)) { return \Yii::$app->response->sendFile($file); } throw new \Exception('File not found'); }
Также стоит обратить внимание на функцию xSendFile, которая также отдаёт файл в браузер — но использует при этом X-заголовки. Интерфейс вызова схож с описанными выше методами и описан в документации.
Вот так мы можем просто отдавать файлы в браузер на скачивание при помощи Yii2. Удачи.