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

Класс StreamedResponse

Класс StreamedResponse представляет HTTP-ответ, содержимое которого генерируется постепенно с помощью callback-функции. Вместо готовой строки ответа класс принимает замыкание, которое получает поток вывода и записывает в него данные по частям. Первым параметром передаётся callback, вторым - код статуса, третьим - заголовки. Такой подход полезен для выгрузки больших файлов, генерации отчётов и передачи данных в реальном времени, так как не требует хранить весь контент в памяти.

Синтаксис

new StreamedResponse(callable $callback = null, int $status = 200, array $headers = [])

Пример

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

<?php namespace AppController; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationStreamedResponse; use SymfonyComponentRoutingAttributeRoute; class ArticleController extends AbstractController { #[Route('/stream', name: 'article_stream')] public function stream(): StreamedResponse { $res = new StreamedResponse(function () { echo 'abcde'; echo 'article'; echo 'hello'; }); return $res; } } ?>

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

abcdearticlehello

Пример

Давайте передадим в поток данные из массива и сбросим буфер после каждой строки:

<?php namespace AppController; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationStreamedResponse; use SymfonyComponentRoutingAttributeRoute; class ArticleController extends AbstractController { #[Route('/stream-array', name: 'article_stream_array')] public function streamArray(): StreamedResponse { $res = new StreamedResponse(function () { $items = ['abcde', 'article', 'user', 'hello']; foreach ($items as $item) { echo $item . "\n"; flush(); } }); return $res; } } ?>

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

abcde article user hello

Пример

Давайте зададим код статуса и заголовок типа контента:

<?php namespace AppController; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationStreamedResponse; use SymfonyComponentRoutingAttributeRoute; class ArticleController extends AbstractController { #[Route('/stream-text', name: 'article_stream_text')] public function streamText(): StreamedResponse { $res = new StreamedResponse(function () { echo 'abcde'; }, 200, ['Content-Type' => 'text/plain']); return $res; } } ?>

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

abcde

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

  • класс Response,
    который представляет обычный HTTP-ответ
  • класс BinaryFileResponse,
    который отдаёт бинарный файл в ответе
  • метод sendContent,
    который отправляет содержимое ответа клиенту
  • метод send,
    который отправляет заголовки и содержимое ответа
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить