48 lines
1.4 KiB
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,
|
|
]));
|
|
}
|
|
}
|