routeCacheFile = $routeCacheFile ?? $this->routeCacheFile; } public function start(): void { $slim = SlimAppFactory::create(); if ($this->config->get('useCache')) { $slim->getRouteCollector()->setCacheFile($this->routeCacheFile); } $slim->setBasePath(RouteUtil::detectBasePath()); $this->addGlobalMiddlewares($slim); $slim->addRoutingMiddleware(); $this->addRoutes($slim); $slim->addErrorMiddleware(false, true, true, $this->log); $slim->run(); } private function addGlobalMiddlewares(SlimApp $slim): void { foreach ($this->middlewareProvider->getGlobalMiddlewareList() as $middleware) { $slim->add($middleware); } } 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 { $slimRoute = $slim->map( [$item->getMethod()], $item->getAdjustedRoute(), function (Psr7Request $request, Psr7Response $response, array $args) use ($slim, $item) { $routeParams = $this->routeParamsFetcher->fetch($item, $args); $processData = new ProcessData( route: $item, basePath: $slim->getBasePath(), routeParams: $routeParams, ); return $this->routeProcessor->process($processData, $request, $response); } ); $middlewareList = $this->middlewareProvider->getRouteMiddlewareList($item); foreach ($middlewareList as $middleware) { $slimRoute->addMiddleware($middleware); } } }