Example #1
0
 /**
  * @param \Psr\Http\Message\ServerRequestInterface $request
  * @return \Psr\Http\Message\ResponseInterface
  */
 public function dispatch(ServerRequestInterface $request)
 {
     $cacheEnabled = $this->config->isCacheEnabled();
     $cacheFile = $this->config->getCacheFile();
     if ($cacheEnabled && file_exists($cacheFile)) {
         $cacheData = (require $cacheFile);
         $dispatchData = $cacheData['dispatch_data'];
         $routes = $cacheData['routes'];
     } else {
         $router = new Router();
         if ($this->routes) {
             $router->middleware($this->config->getMiddleware(), function (Router $router) {
                 $router->append($this->routes);
             });
         }
         $dispatchData = $router->getCollector()->getData();
         $routes = $router->getRoutes();
     }
     if ($cacheEnabled) {
         file_put_contents($cacheFile, '<?php return ' . var_export(['dispatch_data' => $dispatchData, 'routes' => $routes], true) . ';');
     }
     $request = $this->applyVirtualMethod($request);
     $routeInfo = $this->runDispatcher(new GCBDispatcher($dispatchData), $request->getMethod(), $request->getUri()->getPath());
     foreach ($routeInfo[2] as $key => $value) {
         $request = $request->withAttribute($key, $value);
     }
     return $routes[$routeInfo[1]]->execute($request, $this->classLoader, $this->responsifier);
 }