/** * Метод для обработки запроса */ public function run() { // Получаем строку запроса $uri = $this->getURI(); // Проверяем наличие такого запроса в массиве маршрутов (routes.php) foreach ($this->routes as $uriPattern => $path) { // Сравниваем $uriPattern и $uri if (preg_match("~{$uriPattern}~", $uri) != null) { // Получаем внутренний путь из внешнего согласно правилу. $internalRoute = preg_replace("~{$uriPattern}~", $path, $uri); // Определить контроллер, action, параметры $segments = explode('/', $internalRoute); $controllerName = array_shift($segments) . 'Controller'; $controllerName = ucfirst($controllerName); $actionName = 'action' . ucfirst(array_shift($segments)); $parameters = $segments; // Подключить файл класса-контроллера $controllerFile = ROOT . '/controllers/' . $controllerName . '.php'; if (file_exists($controllerFile)) { include_once $controllerFile; } //Если нет таких сонтроллеров и action то выводим 404. if (!is_callable(array($controllerName, $actionName))) { Router::getErrors(); return; } // Создать объект, вызвать метод (т.е. action) $controllerObject = new $controllerName(); /* Вызываем необходимый метод ($actionName) у определенного * класса ($controllerObject) с заданными ($parameters) параметрами */ $result = call_user_func_array(array($controllerObject, $actionName), $parameters); // Если метод контроллера успешно вызван, завершаем работу роутера if ($result != null) { break; } } } }