$response->getBody()->getContents() возвращает пустую строку

У меня есть код ниже:

<?php

use Zend\Diactoros\Response;

$response = new Response('This is the response content');

echo $response->getBody()->getContents();
echo $response->getBody();

Я передаю тело прямо в конструкторе.

Я пытаюсь получить тело этого ответа, не более того, но когда я вызываю getBody() или getBody()->getContents(), это дает мне пустую строку.

Я попробовал другую альтернативу, которая работает:

<?php

use Zend\Diactoros\Response;

$response = new Response;

$response->getBody()->write('This is the response content');

echo $response->getBody()->getContents();
echo $response->getBody();

и это выводит:

Это содержание ответа Это содержание ответа

Почему первая и короткая форма не работает?

1 ответ

Решение

Я нашел проблему, это была моя вина.

На самом деле, __constructor Response получает StreamInterface в качестве первого параметра, а не строку.

Реализация StreamInterface - это то, где вы должны написать свое тело, иначе вы не получите ответа.

Вот хороший подход:

$stream = new Stream('php://temp', 'rw');

$stream->write('This is a response');

$response = (new Response($stream));

echo $response->getBody();
Другие вопросы по тегам