router = $router; $this->app = $app; $this->debug = $debug; } public function dispatch(Request $request): Response { Request::setCurrent($request); try { $route = $this->router->match($request->method(), $request->path()); if (!$route) { return Response::notFound('Page not found.'); } $result = $route->dispatch($this->app); return $this->normalizeResponse($result); } catch (Throwable $e) { if (!$this->debug) { error_log($e->getMessage()); } $message = $this->debug ? $e->getMessage() : 'An unexpected error occurred.'; return Response::serverError($message); } finally { Request::clearCurrent(); } } protected function normalizeResponse(mixed $result): Response { if ($result instanceof Response) { return $result; } if (is_array($result)) { return Response::json($result); } return new Response((string) $result); } }