# Класс HttpSoft\Router\RouteCollector
Класс, предоставляющий методы для создания и реализации маршрутов.
use HttpSoft\Router\RouteCollector;
/**
* @var mixed $handler
*/
$router = new RouteCollector();
$router->add('page.add', '/page/add', $handler, ['GET', 'POST']);
$router->any('page.any', '/page/any', $handler);
$router->get('page.get', '/page/get', $handler);
$router->post('page.post', '/page/post', $handler);
$router->put('page.put', '/page/put', $handler);
$router->patch('page.patch', '/page/patch', $handler);
$router->delete('page.delete', '/page/delete', $handler);
$router->head('page.head', '/page/head', $handler);
$router->options('page.options', '/page/options', $handler);
Можно указать маршруты внутри группы. Все маршруты, определенные внутри группы, будут иметь общий префикс пути.
$router->group('/post', static function (RouteCollector $router) use ($handler): void {
// '/post/post-slug'
$router->get('post.view', '/{slug}', $handler)->tokens(['slug' => '[\w-]+']);
// '/post/list' or '/post/list/2'
$router->get('post.list', '/list{[page]}', $handler)->tokens(['page' => '\d+']);
// '/post/delete/13'
$router->delete('post.delete', '/delete/{id}', DeleteHandler::class)->tokens(['id' => '\d+']);
// '/post/create/11' or '/post/update/12'
$router->add('post.edit', '/(create|update)/{id}', EditHandler::class, ['GET', 'POST'])
->tokens(['id' => '\d+'])
;
});
Результат будет эквивалентен:
$router->get('post.view', '/post/{slug}', $handler)->tokens(['slug' => '[\w-]+']);
$router->get('post.list', '/post/list{[page]}', $handler)->tokens(['page' => '\d+']);
$router->delete('post.delete', '/post/delete/{id}', DeleteHandler::class)->tokens(['id' => '\d+']);
$router->add('post.edit', '/post/(create|update)/{id}', CreateHandler::class, ['GET', 'POST'])
->tokens(['id' => '\d+'])
;
Также поддерживаются вложенные группы, в этом случае префиксы всех вложенных групп объединяются.
# Публичные методы
public function __construct(HttpSoft\Router\RouteCollectionInterface $routes = null);
Если $routes
не было указано или равняется null
, то будет использоваться HttpSoft\Router\RouteCollection.
# routes
Возвращает экземпляр HttpSoft\Router\RouteCollectionInterface со всеми установленными маршрутами.
public function routes(): HttpSoft\Router\RouteCollectionInterface;
# group
Создает группу маршрутов с общим префиксом пути.
/**
* @param string $prefix общий префикс пути для группы маршрутов.
* @param callable $callback каллбэк, который добавит маршруты с общим префиксом пути.
*/
public function group(string $prefix, callable $callback): void;
Каллбэк может принимать экземпляр HttpSoft\Router\RouteCollector
в качестве параметра.
# add
Добавляет маршрут и возвращает его.
/**
* @param string $name уникальное название маршрута.
* @param string $pattern шаблон пути с параметрами.
* @param mixed $handler action, controller, callable, closure и т.д.
* @param array $methods разрешенные методы запроса для маршрута.
* @return HttpSoft\Router\Route
*/
public function add(string $name, string $pattern, $handler, array $methods): Route;
# any
Добавляет общий маршрут для любых методов запроса и возвращает его.
/**
* @param string $name уникальное название маршрута.
* @param string $pattern шаблон пути с параметрами.
* @param mixed $handler action, controller, callable, closure и т.д.
* @return HttpSoft\Router\Route
*/
public function any(string $name, string $pattern, $handler): Route;
# get
Добавляет маршрут только для метода GET
и возвращает его.
/**
* @param string $name уникальное название маршрута.
* @param string $pattern шаблон пути с параметрами.
* @param mixed $handler action, controller, callable, closure и т.д.
* @return HttpSoft\Router\Route
*/
public function get(string $name, string $pattern, $handler): Route;
# post
Добавляет маршрут только для метода POST
и возвращает его.
/**
* @param string $name уникальное название маршрута.
* @param string $pattern шаблон пути с параметрами.
* @param mixed $handler action, controller, callable, closure и т.д.
* @return HttpSoft\Router\Route
*/
public function post(string $name, string $pattern, $handler): Route;
# put
Добавляет маршрут только для метода PUT
и возвращает его.
/**
* @param string $name уникальное название маршрута.
* @param string $pattern шаблон пути с параметрами.
* @param mixed $handler action, controller, callable, closure и т.д.
* @return HttpSoft\Router\Route
*/
public function put(string $name, string $pattern, $handler): Route;
# patch
Добавляет маршрут только для метода PATCH
и возвращает его.
/**
* @param string $name уникальное название маршрута.
* @param string $pattern шаблон пути с параметрами.
* @param mixed $handler action, controller, callable, closure и т.д.
* @return HttpSoft\Router\Route
*/
public function patch(string $name, string $pattern, $handler): Route;
# delete
Добавляет маршрут только для метода DELETE
и возвращает его.
/**
* @param string $name уникальное название маршрута.
* @param string $pattern шаблон пути с параметрами.
* @param mixed $handler action, controller, callable, closure и т.д.
* @return HttpSoft\Router\Route
*/
public function delete(string $name, string $pattern, $handler): Route;
# head
Добавляет маршрут только для метода HEAD
и возвращает его.
/**
* @param string $name уникальное название маршрута.
* @param string $pattern шаблон пути с параметрами.
* @param mixed $handler action, controller, callable, closure и т.д.
* @return HttpSoft\Router\Route
*/
public function head(string $name, string $pattern, $handler): Route;
# options
Добавляет маршрут только для метода OPTIONS
и возвращает его.
/**
* @param string $name уникальное название маршрута.
* @param string $pattern шаблон пути с параметрами.
* @param mixed $handler action, controller, callable, closure и т.д.
* @return HttpSoft\Router\Route
*/
public function options(string $name, string $pattern, $handler): Route;