requestProcessor = $requestProcessor; $this->routeUtil = $routeUtil; $this->routeParamsFetcher = $routeParamsFetcher; $this->log = $log; } public function start(): void { $slim = SlimAppFactory::create(); $slim->setBasePath(RouteUtil::detectBasePath()); $slim->addRoutingMiddleware(); $this->addRoutes($slim); $slim->addErrorMiddleware(false, true, true, $this->log); $slim->run(); } private function addRoutes(SlimApp $slim): void { $routeList = $this->routeUtil->getFullList(); foreach ($routeList as $item) { $this->addRoute($slim, $item); } } private function addRoute(SlimApp $slim, Route $item): void { $slim->map( [$item->getMethod()], $item->getRoute(), function (Psr7Request $request, Psr7Response $response, array $args) use ($slim, $item) { $routeParams = $this->routeParamsFetcher->fetch($item, $args); $requestWrapped = new RequestWrapper($request, $slim->getBasePath(), $routeParams); $responseWrapped = new ResponseWrapper($response); $this->requestProcessor->process($item, $requestWrapped, $responseWrapped); return $responseWrapped->getResponse(); } ); } }