/
GhostLogic
/
SudakOnline
Обзор
Документация
Войти
/
GhostLogic
/
SudakOnline
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
api/src/Router.php
88 строк
3 KB
GhostLogic
Загрузить файлы в «»
28 апр 2026, 18:11
Верифицирован
28 апр 2026, 18:11
3c10f40
Код
Авторство
О чём код?
<?php namespace SudakOnline; class Router { private $routes = []; private $globalMiddleware = []; public function addGlobalMiddleware($middleware) { $this->globalMiddleware[] = $middleware; } public function get($path, $handler, $middlewares = []) { $this->addRoute('GET', $path, $handler, $middlewares); } public function post($path, $handler, $middlewares = []) { $this->addRoute('POST', $path, $handler, $middlewares); } public function delete($path, $handler, $middlewares = []) { $this->addRoute('DELETE', $path, $handler, $middlewares); } private function addRoute($method, $path, $handler, $middlewares) { $this->routes[] = [ 'method' => $method, 'path' => $path, 'handler' => $handler, 'middlewares' => $middlewares ]; } public function dispatch() { $method = $_SERVER['REQUEST_METHOD']; // Получаем path из query-параметра, если есть $path = isset($_GET['path']) ? '/' . trim($_GET['path'], '/') : '/'; // Если path не задан, пробуем извлечь из REQUEST_URI (для совместимости со старыми правилами) if ($path === '/' && isset($_SERVER['REQUEST_URI'])) { $requestUri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH); // Вычисляем базовый путь: /products/sudak-online/api/index.php $basePath = '/products/sudak-online/api/index.php'; if (strpos($requestUri, $basePath) === 0) { $pathPart = substr($requestUri, strlen($basePath)); if (!empty($pathPart)) { $path = $pathPart; } } else { // Альтернативный базовый путь для ЧПУ (без index.php) $basePath = '/products/sudak-online/api'; if (strpos($requestUri, $basePath) === 0) { $pathPart = substr($requestUri, strlen($basePath)); if (empty($pathPart)) $pathPart = '/'; $path = $pathPart; } } } // Нормализуем путь: убираем лишние слэши $path = '/' . ltrim($path, '/'); foreach ($this->routes as $route) { if ($route['method'] === $method && $route['path'] === $path) { // Глобальные middleware foreach ($this->globalMiddleware as $mw) { $mw->handle(); } // Маршрутные middleware foreach ($route['middlewares'] as $mwClass) { (new $mwClass())->handle(); } $this->callHandler($route['handler']); return; } } http_response_code(404); echo json_encode(['success' => false, 'error' => 'Endpoint not found']); } private function callHandler($handler) { list($controllerName, $method) = explode('@', $handler); $controllerClass = "SudakOnline\\Controllers\\$controllerName"; $controller = new $controllerClass(); $controller->$method(); } }