responseBuilder = $builder; } protected function handleFound(Dispatched $dispatched, ServerRequestInterface $request): mixed { if ($dispatched->handler->callback instanceof Closure) { $callback = $dispatched->handler->callback; $response = $callback(); } else { [$controller, $action] = $this->prepareHandler($dispatched->handler->callback); $controllerInstance = $this->container->get($controller); if (! method_exists($controller, $action)) { // Route found, but the handler does not exist. return $this->responseBuilder->buildErrorResponse($request, ResponseBuilder::INTERNAL_ERROR); } try { $parameters = $this->parseMethodParameters($controller, $action, $request->getParsedBody()); } catch (InvalidArgumentException) { return $this->responseBuilder->buildErrorResponse($request, ResponseBuilder::INVALID_PARAMS); } try { $response = $controllerInstance->{$action}(...$parameters); } catch (Throwable $exception) { $response = $this->responseBuilder->buildErrorResponse($request, ResponseBuilder::SERVER_ERROR, $exception); $this->responseBuilder->persistToContext($response); throw $exception; } } return $response; } protected function handleNotFound(ServerRequestInterface $request): mixed { return $this->responseBuilder->buildErrorResponse($request, ResponseBuilder::METHOD_NOT_FOUND); } protected function handleMethodNotAllowed(array $methods, ServerRequestInterface $request): mixed { return $this->handleNotFound($request); } protected function transferToResponse($response, ServerRequestInterface $request): ResponsePlusInterface { return $this->responseBuilder->buildResponse($request, $response); } }