Loads a Yaml file.
@api
string $file A Yaml file path:
string|null $type The resource type:
RouteCollection A RouteCollection instance
\InvalidArgumentException When a route can't be parsed because YAML is invalid
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;
}