chore: lots of changes
This commit is contained in:
73
src/Framework/Router/RouteResponder.php
Normal file
73
src/Framework/Router/RouteResponder.php
Normal file
@@ -0,0 +1,73 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Framework\Router;
|
||||
|
||||
use App\Framework\Http\Headers;
|
||||
use App\Framework\Http\HttpResponse;
|
||||
use App\Framework\Http\Response;
|
||||
use App\Framework\View\Engine;
|
||||
use App\Framework\View\RenderContext;
|
||||
use App\Framework\View\TemplateRenderer;
|
||||
|
||||
readonly class RouteResponder
|
||||
{
|
||||
public function __construct(
|
||||
private TemplateRenderer $templateRenderer = new Engine()
|
||||
) {
|
||||
}
|
||||
|
||||
public function respond(ActionResult $result): Response
|
||||
{
|
||||
$contentType = "text/html";
|
||||
|
||||
switch ($result->resultType) {
|
||||
case ResultType::Html:
|
||||
$body = $this->renderTemplate(
|
||||
$result->template,
|
||||
$result->data,
|
||||
$result->layout ?? null,
|
||||
$result->slots ?? [],
|
||||
$result->controllerClass
|
||||
);
|
||||
|
||||
$contentType = "text/html";
|
||||
|
||||
break;
|
||||
case ResultType::Json:
|
||||
$body = json_encode(
|
||||
$result->data,
|
||||
JSON_THROW_ON_ERROR | JSON_UNESCAPED_UNICODE
|
||||
);
|
||||
$contentType = "application/json";
|
||||
|
||||
break;
|
||||
case ResultType::Plain:
|
||||
$body = $result->data['text'] ?? '';
|
||||
$contentType = "text/plain";
|
||||
break;
|
||||
default:
|
||||
throw new \RuntimeException("Unknown result type: {$result->resultType}");
|
||||
}
|
||||
|
||||
return new HttpResponse(
|
||||
status: $result->status,
|
||||
headers: new Headers()->with('Content-Type', $contentType), //['Content-Type' => $contentType],
|
||||
body: $body
|
||||
);
|
||||
}
|
||||
|
||||
private function renderTemplate(string $template, array $data, ?string $layout, array $slots = [], ?string $controllerName = null): string
|
||||
{
|
||||
$context = new RenderContext(
|
||||
template: $template,
|
||||
data: $data,
|
||||
layout: $layout,
|
||||
slots: $slots,
|
||||
controllerClass: $controllerName
|
||||
);
|
||||
|
||||
return $this->templateRenderer->render($context);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user