Example #1
0
 /**
  * Метод для обработки запроса
  */
 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;
             }
         }
     }
 }