Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

237
Vistas
Usando GuzzleHttp/Psr7/Response correctamente

No estoy seguro de cuál es la forma correcta de mostrar en una página php una respuesta Psr7 Guzzle.

Ahora mismo, estoy haciendo:

 use GuzzleHttp\Psr7\BufferStream; use GuzzleHttp\Psr7\Response; class Main extends \pla\igg\Main { function __construct() { $stream = new BufferStream(); $stream->write("Hello I am a buffer"); $response = new Response(); $response = $response->withBody($stream); $response = $response->withStatus('201'); $response = $response->withHeader("Content-type", "text/plain"); $response = $response->withAddedHeader("IGG", "0.4.0"); //Outputing the response http_response_code($response->getStatusCode()); foreach ($response->getHeaders() as $strName => $arrValue) { foreach ($arrValue as $strValue) { header("{$strName}:{$strValue}"); } } echo $response->getBody()->getContents(); } }

¿Hay una forma más OOP de mostrar la respuesta?

about 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Una forma más OOP de hacer lo mismo es crear un objeto Sender que requiera una ResponseInterface en su constructor. Esta clase sería responsable de establecer encabezados, borrar búferes y generar la respuesta:

 use Psr\Http\Message\ResponseInterface; class Sender { protected $response; public function __construct(ResponseInterface $response) { $this->response = $response; } public function send(): void { $this->sendHeaders(); $this->sendContent(); $this->clearBuffers(); } protected function sendHeaders(): void { $response = $this->response; $headers = $response->getHeaders(); $version = $response->getProtocolVersion(); $status = $response->getStatusCode(); $reason = $response->getReasonPhrase(); $httpString = sprintf('HTTP/%s %s %s', $version, $status, $reason); // custom headers foreach ($headers as $key => $values) { foreach ($values as $value) { header($key.': '.$value, false); } } // status header($httpString, true, $status); } protected function sendContent() { echo (string) $this->response->getBody(); } protected function clearBuffers() { if (function_exists('fastcgi_finish_request')) { fastcgi_finish_request(); } elseif (PHP_SAPI !== 'cli') { $this->closeOutputBuffers(); } } private function closeOutputBuffers() { if (ob_get_level()) { ob_end_flush(); } } }

Úsalo así:

 $sender = new Sender($response); $sender->send();

Mejor aún, podría inyectar el remitente en el objeto de su aplicación y transformarlo en una variable de clase, por lo que lo llamaría así:

 function renderAllMyCoolStuff() { $this->sender->send(); }

Lo dejaré como un ejercicio de lectura para implementar getters y setters para el objeto Response, además de un método para recibir una cadena de contenido y transformarla en un objeto Response internamente.

about 4 years ago · Santiago Trujillo Denunciar

0

Guzzle es una biblioteca para realizar llamadas HTTP dentro de su aplicación, no tiene nada que ver con la comunicación del usuario final.

Si necesita enviar encabezados específicos a su usuario final, simplemente use http_response_code() (que ya está usando), header() y echo . O vea los documentos para su marco, si usa uno ( Symfony , Slim , lo que sea).

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda