index/src/Http/Routing/ErrorHandling/HtmlErrorHandler.php

48 lines
1.4 KiB
PHP

<?php
// HtmlErrorHandler.php
// Created: 2024-03-28
// Updated: 2025-03-07
namespace Index\Http\Routing\ErrorHandling;
use Index\Http\{HttpResponse,HttpStream};
use Index\Http\Routing\HandlerContext;
/**
* Represents a basic HTML error message handler for building HTTP response messages.
*/
class HtmlErrorHandler implements ErrorHandler {
private const TEMPLATE = <<<HTML
<!doctype html>
<html>
<head>
<meta charset=":charset">
<title>:code :message</title>
</head>
<body>
<center><h1>:code :message</h1><center>
<hr>
<center>Index</center>
</body>
</html>
HTML;
public function handle(HandlerContext $context): void {
if(!$context->response->needsBody)
return;
$context->response->setTypeHtml();
$charSet = mb_preferred_mime_name(mb_internal_encoding());
if($charSet === false)
$charSet = 'UTF-8';
$context->response->body = HttpStream::createStream(strtr(self::TEMPLATE, [
':charset' => strtolower($charSet),
':code' => sprintf('%03d', $context->response->statusCode),
':message' => $context->response->reasonPhrase === ''
? HttpResponse::defaultReasonPhase($context->response->statusCode)
: $context->response->reasonPhrase,
]));
}
}