Как потоковая загрузка данных из текущего представления в Laravel 5.7

Я делаю базовое приложение базы данных, которое позволяет пользователям отправлять параметры поиска через форму и отображать результаты в виде. Я создаю запрос из модели Eloquent, разбиваю на страницы, а затем отправляю результаты в представление.

Я хотел бы разместить ссылку на представление результатов, которая позволяет пользователям загружать результаты своего запроса в CSV-файл, но передавать данные в потоковом режиме, а не создавать файл, а затем обслуживать его. Моя проблема в том, что я не знаю, как передать запрос со страницы результатов по маршруту на другой контроллер, который обрабатывает загрузку.

Информация, которую я нашел об отправке данных на маршрут, включает в себя отправку параметров для URL, который, я не уверен, мне помогает.

Я думал, что смогу кешировать результаты, отправив данные из контроллера, обрабатывающего запрос, в контроллер, обрабатывающий загрузку, перед отправкой его в представление, но я не уверен, как это сделать, или Laravel предоставляет лучший способ сделать то, что Я хочу.

1

Решение

Вот как я делаю это с Laravel 5.6 в view когда пользователь хочет скачать csv файл. Обратите внимание, что вы должны пройти Builder объект вместо LengthAwarePaginator, Также обратите внимание на send() метод после streamDownload который я должен был понять сам.

/** @var \Illuminate\Database\Query\Builder $results */
$callback = function () use ($results) {
$file = fopen('php://output', 'w');
// Set column names from the first result keys
fputcsv($file, array_keys((array)$results->first()));

// Get results in chunks to stream large downloads
$results->chunk(1000,
function ($rows) use ($file) {
foreach ($rows as $row) {
fputcsv($file, (array)$row);
}
}
);

fclose($file);
};
$headers = [
'Content-Type' => 'text/csv',
];

return response()->streamDownload($callback, 'filename.csv', $headers)->send();
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector