Обзор маршрутов IO7
Внимание
Данная статья документации написана нейросетью. Возможны некоторые расхождения и неточность информации!
IO7 использует класс-based роутинг с поддержкой middleware, CORS, и автоматической генерацией regex-паттернов из URL.
Требования: PHP ^8.2, Illuminate (Laravel 13)
Архитектура
App::add_route([...]) ← регистрация маршрута
│
├── URL match ← regex-паттерн
├── HTTP method ← GET, POST, PUT, DELETE
├── class_name ← класс Route
├── method ← метод обработчик
├── middleware[] ← цепочка middleware
└── cors ← CORS конфигурация
Ключевые классы
| Класс | Описание |
|---|---|
IO\App | Главный класс приложения, регистрация маршрутов |
IO\Route | Базовый класс маршрутов |
IO\Request | Объект запроса |
IO\Response | Объект ответа |
IO\Middleware | Интерфейс middleware |
IO\Routes\ApiRoute | Маршрут для API (/entity/:entity) |
IO\Routes\GateRoute | Маршрут для шлюза (/gate/:entity) |
Жизненный цикл запроса
1. App::findRoute() ← поиск маршрута по URI + method
2. Route::init() ← инициализация, запуск middleware (before)
3. Route::actionXxx() ← вызов обработчика
4. Route::handleResponse() ← преобразование ответа
5. Response::send() ← отправка клиенту
6. Route::after() ← запуск middleware (after)
Простой пример
$app->add_route([
'url' => '/users/:id',
'type' => ['get'],
'class_name' => \App\Routes\UserRoute::class,
'method' => 'show',
]);
class UserRoute extends \IO\Route
{
public function show(): \IO\Response
{
$id = $this->args['id'];
$user = \IO\Core::call('app.class.user.getById', ['id' => $id]);
return $this->json($user);
}
}
Автоматическая генерация regex
Если match не указан, паттерн генерируется из url:
$app->add_route([
'url' => '/products/:category/:slug',
// Генерируется: /^\/products\/(?<category>[^\/]+)\/(?<slug>[^\/]+)\/?$/i
]);
Параметры :param become именованные группы regex, доступные через $this->args.