subcon.town/libs/zap/Routing/Repository.php

82 lines
2.4 KiB
PHP

<?php
namespace Subcon\Zap\Routing;
class Repository
{
/**
* @var array
*/
private array $routes;
/**
* RoutingRepository constructor.
*/
public function __construct()
{
$this->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;
}
}