РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
163 of 1361 menu

Метод stream

Метод stream класса AbstractController возвращает объект StreamedResponse и применяется для отдачи больших объёмов данных: файлов, логов, выгрузок из базы. Первым параметром передаётся callback, который получает поток вывода $output и записывает в него данные. Вторым параметром можно передать HTTP-статус, третьим - массив заголовков. Данные отправляются клиенту по мере записи в поток, поэтому память не переполняется.

Синтаксис

stream(callable $callback, int $status = 200, array $headers = []): StreamedResponse

Пример

Давайте отдадим клиенту строку 'abcde' через потоковый ответ:

<?php namespace AppController; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationStreamedResponse; class ArticleController extends AbstractController { public function index(): StreamedResponse { return $this->stream(function ($output) { echo 'abcde'; }); } } ?>

Результат выполнения кода:

abcde

Пример

Давайте отдадим данные порциями, записывая их в поток в цикле:

<?php namespace AppController; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationStreamedResponse; class ArticleController extends AbstractController { public function index(): StreamedResponse { return $this->stream(function ($output) { foreach ([1, 2, 3, 4, 5] as $num) { echo $num . ' '; } }); } } ?>

Результат выполнения кода:

1 2 3 4 5

Пример

Давайте отдадим CSV-файл с заголовками для скачивания:

<?php namespace AppController; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationStreamedResponse; class ArticleController extends AbstractController { public function download(): StreamedResponse { return $this->stream( function ($output) { echo "name,value\n"; echo "article,1\n"; echo "user,2\n"; }, 200, [ 'Content-Type' => 'text/csv', 'Content-Disposition' => 'attachment; filename="data.csv"', ] ); } } ?>

В ответ клиент получит CSV-файл с именем data.csv и содержимым из двух строк данных.

Смотрите также

  • класс AbstractController,
    базовый класс контроллера Symfony
  • метод render,
    который рендерит Twig-шаблон
  • метод json,
    который возвращает JSON-ответ
  • метод file,
    который отдаёт файл из файловой системы
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить