/** * Creates a new route instance. * * @param string|string[] $method HTTP request method(s) * @param string $path URI path * @param string|callable $callback * @param string|null $name * * @return \Elegant\Http\Route\Route */ private function create($method, $path, $callback, $name = null) { $methods = (array) $method; $scheme = $host = ''; $middlewares = $this->middlewares; $conditions = $this->conditions; foreach ($this->groups as $group) { foreach ($group as $key => $value) { switch ($key) { case 'namespace': if (is_string($callback)) { $callback = $value . $callback; } break; case 'name.prefix': if (!is_null($name)) { $name = $value . $name; } break; case 'name.suffix': if (!is_null($name)) { $name .= $value; } break; case 'scheme': $scheme = $value; break; case 'host': $host = $value; break; case 'host.prefix': $host = $value . $host; break; case 'host.suffix': $host .= $value; break; case 'path.prefix': $path = $value . $path; break; case 'path.suffix': $path .= $value; break; case 'methods': $methods = array_merge($methods, $value); break; case 'middlewares': $middlewares = array_merge($middlewares, $value); break; case 'conditions': $conditions = array_replace($conditions, $value); break; } } } $route = new Route($methods, $path, $callback, $name); $route->setScheme($scheme); $route->setHost($host); $route->setMiddlewares($middlewares); $route->setConditions($conditions); return $route; }