/** * Метод принимающий управление от фронт контроллера * @return void */ public function run() { //получение строки запроса $uri = $this->getUri(); $i = 1; //проверка наличия данного запроса в routes.php foreach ($this->routes as $uriPattern => $path) { if (preg_match("~{$uriPattern}~", $uri)) { //получаем внутренний путь из внешнего согласно параметру $internalRoute = preg_replace("~{$uriPattern}~", $path, $uri); //определение контроллера и экшена обрабатывающего запрос $segments = explode('/', $internalRoute); $controllerName = ucfirst(array_shift($segments) . 'Controller'); $actionName = 'action' . ucfirst(array_shift($segments)); $parameters = $segments; //проверка на существование контроллера и его экшена if (!class_exists($controllerName) || !method_exists(new $controllerName(), $actionName)) { $controllerName = 'SiteController'; $actionName = 'actionIndex'; } //Создание объекта контроллера и вызов его экшена $controllerObject = new $controllerName(); /* Вызываем необходимый метод ($actionName) у определенного * класса ($controllerObject) с заданными ($parameters) параметрами */ $result = call_user_func_array(array($controllerObject, $actionName), $parameters); if ($result != null) { break; } } else { if (count($this->routes) == $i) { //если нет совпадений или введен не существующий адрес, то вызовет SiteController $controllerObject = new SiteController(); $result = $controllerObject->actionIndex(); } } $i++; } }
<?php use TPP\Models\TPP; require "vendor/autoload.php"; $time = microtime(true); prioIncludes(); includes(); new Init(); if (TPP_DEBUG) { error_reporting(E_ALL); ini_set('display_errors', 1); } TPP::initializeConnection(); $site = new SiteController(); $site->actionIndex(); echo '<h1>loaded in ' . round(microtime(true) - $time, 7) . ' secs</h1>'; exit; function prioIncludes() { $priorityIncludes = ['controllers' => ['Controller'], 'models' => ['Init']]; foreach ($priorityIncludes as $key => $prio) { foreach ($prio as $pr) { include_once $key . '/' . $pr . '.php'; } } } function includes() { $includes = ['controllers', 'models', 'helpers']; foreach ($includes as $inc) { foreach (glob($inc . "/*.php") as $filename) {