/
Malenych
/
techart_test
Обзор
Документация
Войти
/
Malenych
/
techart_test
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
engine/Router.php
82 строки
2 KB
Andrey Malenko
Классы, которые не должны быть объявлены, сделаны абстрактными
25 янв 2026, 18:50
25 янв 2026, 18:50
107d376
Код
Авторство
О чём код?
<?php namespace Engine; use Engine\Request; /** * Отвечает за маршрутизацию проекта */ abstract class Router { private static $route_list = []; /** * Помещает маршрут в общий список * @param string $path * @param string $controller_name * @param string $method_name * @param string $view_name * @return void */ public static function set(string $path, string $controller_name, string $method_name, string $view_name): void { self::$route_list[] = [ 'path' => new Path($path), 'controller' => $controller_name, 'method' => $method_name, 'view' => $view_name ]; } /** * Вызывает метод указанного в пути контроллера и передает параметр запроса * @return void */ public static function go(): void { $path_number = self::currentPath($_SERVER['REQUEST_URI']); $request = self::makeRequest($path_number); $route =& self::$route_list[$path_number]; (new ('App\\Controllers\\' . $route['controller']))->{$route['method']}($request); } /** * Определяет номер текущего маршрута в списке * @param string $path * @return int|null */ private static function currentPath(string $path): ?int { $path = explode('?', $path)[0]; for ($i = 0; $i < count(self::$route_list); $i++) { if (preg_match('#' . self::$route_list[$i]['path']->getReg() . '#', $path)) { return $i; } } return null; } /** * Создает параметры для текущего маршрута * @param int $path_number * @return Request */ private static function makeRequest(int $path_number): Request { return new Request(self::$route_list[$path_number]['path']); } /** * Возвращает список маршрутов и их параметры * @return array[] */ public static function getRouteList(): array { return self::$route_list; } }