code: public function locatePath($path = '')
      {
          // Obtain base URL when path is empty, or not starts from "//" or "http".
          if (empty($path) || strpos($path, '//') !== 0 && strpos($path, 'http') !== 0) {
              $path = rtrim($this->getMinkParameter('base_url'), '/') . '/' . ltrim($path, '/');
          }
  
          $url = parse_url($path);
  
          if (!isset($url['host'])) {
              throw new \InvalidArgumentException(sprintf('Incorrect URL: %s', func_get_arg(0)));
          }
  
          // When URL starts from "//" the "scheme" key will not exists.
          if (isset($url['scheme'])) {
              // Check scheme.
              if (!in_array($url['scheme'], ['http', 'https'])) {
                  throw new \InvalidArgumentException(sprintf('%s is not valid scheme.', $url['scheme']));
              }
  
              $path = $url['scheme'] . ':';
          } else {
              // Process "//" at the start.
              $path = '';
          }
  
          $path .= '//';
  
          if (isset($url['user'], $url['pass'])) {
              // Encode special characters in username and password. Useful
              // when some item contain something like "@" symbol.
              foreach (['user' => ':', 'pass' => '@'] as $part => $suffix) {
                  $path .= rawurlencode($url[$part]) . $suffix;
              }
          }
  
          $path .= $url['host'];
  
          // Append additional URL components.
          foreach (['port' => ':', 'path' => '', 'query' => '?', 'fragment' => '#'] as $part => $prefix) {
              if (isset($url[$part])) {
                  $path .= $prefix . $url[$part];
              }
          }
  
          return $path;
      }
docs: {@inheritdoc}