В проекте на Yii2, я загружаю через форму файлы в папку files, находящуюся в корне проекта, а не в папке web.
Как вывести ссылки на эти файлы в view, чтобы их можно было скачивать, как-то динамически?
Ответ
У меня нет под рукой ни php, ни Yii2, поэтому ограничусь подсказками, а не готовым решением из разряда "скопируй и выполни".
Вам нужен некий контролер, назовем его FilesController
class FilesController extends Controller
{
// ...
}
Внутри него будут два action'а - actionIndex и actionDownload. Первый будет служить для показа списка файлов, а второй для непосредственной выдачи содержимого файла пользователю.
Так же нам понадобится некое свойство, которое будет содержать путь к папке с файлами. В Yii2 путь к корневой папке находится в Yii::$app->basePath. Соответственно, пишем в методе инициализации контролера:
/**
* @var string
*/
private $path;
public function init()
{
$this->path = realpath(Yii::$app->basePath . '/files/');
}
В actionIndex получаем список файлов и передаём его в view:
public function actionIndex()
{
$files = array();
foreach (new DirectoryIterator($this->path) as $item) {
array_push($files, $item->getFilename());
}
return $this->render('files', array(
'files' => $files
));
}
В view вам нужно будет вывести список ссылок указывающих на actionDownload. Url для каждого файла можно получить примерно так:
Url::to(['download','name'=> $fileName]);
Ну и собственно в actionDownload отдаём файл(для $name желательно добавить валидацию, что бы пользователи не присылали всякую ересь):
public function actionDownload($name)
{
return Yii::$app->response->sendFile($this->path . $name);
}
Комментариев нет:
Отправить комментарий