Просмотр поста

.
Delphinum
Роутер
Маршрутизация запросов это один из основных механизмов любого фреймворка, обеспечивающий стройную структуру приложения и разделение ответственности. Чаще всего используется маршрутизация на основе парсинга 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 - обработка запросов любого типа

Архив с примером.