protected function addRoute(ControllerCollection $ctr, $name, array $config)
{
$config = new ArrayCollection($config);
if (!($path = $config['path'])) {
return;
}
if (!($defaults = $config['defaults'])) {
return;
}
$defaults = new ArrayCollection($defaults);
if (!($to = $defaults->remove('_controller'))) {
return;
}
$route = $ctr->match($path, $to);
$before = $defaults->remove('_before') ?: '::before';
$before = $this->resolveBefore($before);
$route->before($before);
$after = $defaults->remove('_after') ?: '::after';
$after = $this->resolveAfter($after);
$route->after($after);
foreach ($defaults as $key => $value) {
$route->value($key, $value);
}
foreach ($config['requirements'] ?: [] as $variable => $callback) {
$callback = $this->callbackResolver->resolveCallback($callback);
$requirement = is_callable($callback) ? call_user_func($callback) : $callback;
$route->assert($variable, $requirement);
}
if ($host = $config['host']) {
$route->getRoute()->setHost($host);
}
if ($methods = $config['methods']) {
$route->getRoute()->setMethods($methods);
}
if ($schemes = $config['schemes']) {
$route->getRoute()->setSchemes($schemes);
}
$route->bind($name);
}