Маршрутизация запросов это один из основных механизмов любого фреймворка, обеспечивающий стройную структуру приложения и разделение ответственности. Чаще всего используется маршрутизация на основе парсинга URI, на пример так:
/admin/user/delete/([0-9]+)
Такой парсер может использоваться для удаление пользователей по его идентификатору.
В пакете Bricks.Http.Router реализована RESTful маршрутизация. Это означает, что применяются не только ставшие стандартными для PHP запросы типа GET и POST, но так же PUT и DELETE. Это полезно для реализации одно-страничных Web-приложений.
Пакет включает два управляющих класса:
Request - представление запроса
Response - представление ответа
Рассмотрим пример с их использованием:
use Bricks\Http\Routing\Request;
$request = new Request;
echo $request->method(); // Метод запроса (GET, POST, PUT или DELETE)
echo $request->path(); // URI запроса
echo $request->header('Content-Type'); // Параметр заголовка запроса
echo $request->cookie('login'); // Параметр cookie
echo $request->param('action'); // Параметр action запроса
use Bricks\Http\Routing\Response;
$response = new Response;
$response->code(200); // Код ответа
$response->header('Content-Type', 'text/html'); // Заголовок ответа
$response->cookie('role', 'user'); // Cookie ответа
$response->body('<div>Hello world</div>'); // Тело ответа
$response->send(); // Передача ответа клиенту
Думаю пример в объяснении не нуждается.
Роутинг запросов выполняется с помощью класса Router. С помощью этого класса возможно зарегистрировать любое количество маршрутов и действий, которые с ними связаны.
Пример регистрации маршрута:
use Bricks\Http\Routing\Router;
$router = new Router;
$router->get('~^/admin/([A-Za-z]+)/([A-Za-z]+)~', function(Request $request, Response $response, array $match){
list($controller, $action) = $match;
$controller = new $controller;
$controller->$action();
});
$response = new Response;
$router->run(new Request, $response);
$response->send();
Здесь регистрируется обработка GET запросов к пути вида:
/admin/контроллер/действие
Функция, передаваемая во втором параметре метода get будет вызвана, если данный маршрут будет являться успешным. Эта функция получит в качестве параметров экземпляры классов Request и Response, что позволит ей сформировать ответ клиенту, а так же массив $match, содержащий группы, выделенные в URI шаблоном маршрута (в данном случае это имя целевого контроллера и действие).
Класс Router включает следующие методы маршрутизации:
get - обработка GET запросов
post - обработка POST запросов
put - обработка PUT запросов
delete - обработка DELETE запросов
all - обработка запросов любого типа
Архив с примером.