/** * @param Request $request * @param int $type * @param bool $catch */ public function handle(Request $request, $type = self::MASTER_REQUEST, $catch = true) { if ($type === HttpKernelInterface::SUB_REQUEST) { return $this->app->handle($request, $type, $catch); } $context = new RequestContext(); $context->fromRequest($request); $this->routeBuilder->setRequest($request); $this->routeBuilder->setRequestContext($context); $routeCollection = $this->router->getRouteCollection(); $configuration = $this->routeBuilder->build(); $routeCollection->addCollection($configuration->getRouteCollection()); $this->router->setUrlGenerator($configuration->getUrlGenerator()); $this->router->setUrlMatcher(new UrlMatcher($routeCollection, $context)); $request->attributes->add($this->router->match($request->getPathInfo())); $route = $routeCollection->get($request->attributes->get('_route')); if (null === $route->getOption('dispatch')) { throw new NotFoundHttpException(); } $request->attributes->set('dispatch', $route->getOption('dispatch')); return $this->app->handle($request, $type, $catch); }
/** * @return ContainerInterface */ public function startContainer() { if (true === $this->isStarted()) { return $this->container; } $configAsArray = iterator_to_array($this->config->getIterator()); $this->internalConfig['parameters'] = $configAsArray; $this->container = $this->createContainer(new ArrayConfig($this->internalConfig)); $loggerFactory = new LoggerFactory($this->config->get('debug'), $this->config->get('log_dir')); $this->container->bind('LoggerFactory', $loggerFactory); if (null !== $this->router) { // Keep compatibility, use the right type hint in the application as usual (UrlGeneratorInterface, UrlMatcherInterface) $this->container->bind('UrlMatcher', $this->router->getUrlMatcher()); $this->container->bind('UrlGenerator', $this->router->getUrlGenerator()); $this->container->bind('RouteCollection', $this->router->getRouteCollection()); } $this->container->bind('AppLogger', $this->loggerFactory->getLogger('app')); $this->started = true; return $this->container; }