routes = []; } /** * Register a new route. * * @param string $pattern The uri pattern to match * @param array|string $methods One or more HTTP methods to match * @param string|array|callable $callback A callback to run if this route is called * @param array $middlewares List of extra middlewares to run for this route * @return void */ public function register(string $pattern, array|string $methods, string|array|callable $callback, array $middlewares = []): void { $route = new Route($pattern, $methods, $callback, $middlewares); foreach($route->getMethods() as $method) { $this->routes[$method][] = $route; } } public function get(string $pattern, string|array|callable $callback, array $middlewares = []): void { $this->register($pattern, 'GET', $callback, $middlewares); } public function post(string $pattern, string|array|callable $callback, array $middlewares = []): void { $this->register($pattern, 'POST', $callback, $middlewares); } public function put(string $pattern, string|array|callable $callback, array $middlewares = []): void { $this->register($pattern, 'PUT', $callback, $middlewares); } public function delete(string $pattern, string|array|callable $callback, array $middlewares = []): void { $this->register($pattern, 'DELETE', $callback, $middlewares); } public function options(string $pattern, string|array|callable $callback, array $middlewares = []): void { $this->register($pattern, 'OPTIONS', $callback, $middlewares); } public function patch(string $pattern, string|array|callable $callback, array $middlewares = []): void { $this->register($pattern, 'PATCH', $callback, $middlewares); } public function head(string $pattern, string|array|callable $callback, array $middlewares = []): void { $this->register($pattern, 'HEAD', $callback, $middlewares); } /** * Get the list of registered routes. * * @return array */ public function getRoutes(): array { return $this->routes; } }