# Класс HttpSoft\Router\RouteCollector

Класс, предоставляющий методы для создания и реализации маршрутов.

Исходный код на GitHub.

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('post.get', '/page/get', $handler);
$router->post('post.post', '/page/post', $handler);
$router->put('post.put', '/page/put', $handler);
$router->patch('post.patch', '/page/patch', $handler);
$router->delete('post.delete', '/page/delete', $handler);
$router->head('post.head', '/page/head', $handler);
$router->options('post.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' or '/post/page-14'
    $router->get('post.list', '{[page]}', $handler)->tokens(['page' =>  '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{[page]}', $handler)->tokens(['page' =>  '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 и возвращает его.

/**
 * @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;