2018-08-07 03:18:22 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace Engelsystem\Middleware;
|
|
|
|
|
|
|
|
use Psr\Http\Message\ResponseInterface;
|
|
|
|
use Psr\Http\Message\ServerRequestInterface;
|
|
|
|
use Psr\Http\Server\MiddlewareInterface;
|
|
|
|
use Psr\Http\Server\RequestHandlerInterface;
|
|
|
|
|
|
|
|
class SendResponseHandler implements MiddlewareInterface
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* Send the server response to the client
|
|
|
|
*
|
|
|
|
* This should be the first middleware
|
|
|
|
*
|
|
|
|
* @param ServerRequestInterface $request
|
|
|
|
* @param RequestHandlerInterface $handler
|
|
|
|
* @return ResponseInterface
|
|
|
|
*/
|
|
|
|
public function process(
|
|
|
|
ServerRequestInterface $request,
|
|
|
|
RequestHandlerInterface $handler
|
|
|
|
): ResponseInterface {
|
|
|
|
$response = $handler->handle($request);
|
|
|
|
|
2018-08-11 23:46:28 +02:00
|
|
|
if (!$this->headersSent()) {
|
|
|
|
$this->sendHeader(sprintf(
|
2018-08-07 03:18:22 +02:00
|
|
|
'HTTP/%s %s %s',
|
|
|
|
$response->getProtocolVersion(),
|
|
|
|
$response->getStatusCode(),
|
|
|
|
$response->getReasonPhrase()
|
|
|
|
), true, $response->getStatusCode());
|
|
|
|
|
|
|
|
foreach ($response->getHeaders() as $name => $values) {
|
|
|
|
foreach ($values as $value) {
|
2018-08-11 23:46:28 +02:00
|
|
|
$this->sendHeader($name . ': ' . $value, false);
|
2018-08-07 03:18:22 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
echo $response->getBody();
|
|
|
|
return $response;
|
|
|
|
}
|
2018-08-11 23:46:28 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Checks if headers have been sent
|
|
|
|
*
|
|
|
|
* @return bool
|
|
|
|
* @codeCoverageIgnore
|
|
|
|
*/
|
|
|
|
protected function headersSent()
|
|
|
|
{
|
|
|
|
return headers_sent();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Send a raw HTTP header
|
|
|
|
*
|
|
|
|
* @param string $content
|
|
|
|
* @param bool $replace
|
|
|
|
* @param int $code
|
|
|
|
* @codeCoverageIgnore
|
|
|
|
*/
|
|
|
|
protected function sendHeader($content, $replace = true, $code = null)
|
|
|
|
{
|
2021-12-01 00:27:46 +01:00
|
|
|
if (is_null($code)) {
|
|
|
|
header($content, $replace);
|
|
|
|
} else {
|
|
|
|
header($content, $replace, $code);
|
|
|
|
}
|
2018-08-11 23:46:28 +02:00
|
|
|
}
|
2018-08-07 03:18:22 +02:00
|
|
|
}
|