public function YamlFileLoader::load

Same name in this branch

Loads a Yaml file.

@api

Parameters

string $file A Yaml file path:

string|null $type The resource type:

Return value

RouteCollection A RouteCollection instance

Throws

\InvalidArgumentException When a route can't be parsed because YAML is invalid

File

drupal/core/vendor/symfony/routing/Symfony/Component/Routing/Loader/YamlFileLoader.php, line 47

Class

YamlFileLoader
YamlFileLoader loads Yaml routing files.

Namespace

Symfony\Component\Routing\Loader

Code

public function load($file, $type = null) {
  $path = $this->locator
    ->locate($file);
  if (!stream_is_local($path)) {
    throw new \InvalidArgumentException(sprintf('This is not a local file "%s".', $path));
  }
  if (!file_exists($path)) {
    throw new \InvalidArgumentException(sprintf('File "%s" not found.', $path));
  }
  if (null === $this->yamlParser) {
    $this->yamlParser = new YamlParser();
  }
  $config = $this->yamlParser
    ->parse(file_get_contents($path));
  $collection = new RouteCollection();
  $collection
    ->addResource(new FileResource($path));

  // empty file
  if (null === $config) {
    return $collection;
  }

  // not an array
  if (!is_array($config)) {
    throw new \InvalidArgumentException(sprintf('The file "%s" must contain a YAML array.', $path));
  }
  foreach ($config as $name => $config) {
    if (isset($config['pattern'])) {
      if (isset($config['path'])) {
        throw new \InvalidArgumentException(sprintf('The file "%s" cannot define both a "path" and a "pattern" attribute. Use only "path".', $path));
      }
      $config['path'] = $config['pattern'];
      unset($config['pattern']);
    }
    $this
      ->validate($config, $name, $path);
    if (isset($config['resource'])) {
      $this
        ->parseImport($collection, $config, $path, $file);
    }
    else {
      $this
        ->parseRoute($collection, $name, $config, $path);
    }
  }
  return $collection;
}