code: protected function getRequestForPath($path, array $exclude) {
      if (!empty($exclude[$path])) {
        return NULL;
      }
      // @todo Use the RequestHelper once https://www.drupal.org/node/2090293 is
      //   fixed.
      $request = Request::create($path);
      // Performance optimization: set a short accept header to reduce overhead in
      // AcceptHeaderMatcher when matching the request.
      $request->headers->set('Accept', 'text/html');
      // Find the system path by resolving aliases, language prefix, etc.
      $processed = $this->pathProcessor->processInbound($path, $request);
      if (empty($processed) || !empty($exclude[$processed])) {
        // This resolves to the front page, which we already add.
        return NULL;
      }
      $this->currentPath->setPath($processed, $request);
      // Attempt to match this path to provide a fully built request.
      try {
        $request->attributes->add($this->router->matchRequest($request));
        return $request;
      }
      catch (ParamNotConvertedException $e) {
        return NULL;
      }
      catch (ResourceNotFoundException $e) {
        return NULL;
      }
      catch (MethodNotAllowedException $e) {
        return NULL;
      }
      catch (AccessDeniedHttpException $e) {
        return NULL;
      }
    }
docs: Matches a path in the router.
  
  @param string $path
  The request path with a leading slash.
  @param array $exclude
  An array of paths or system paths to skip.
  
  @return \Symfony\Component\HttpFoundation\Request
  A populated request object or NULL if the path couldn't be matched.