/** * Провека на совпадение адресной c справилом */ private function parseURL() { $this->url = urldecode($this->url); foreach ($this->rules as $url => $param) { if (preg_match("#^{$url}\$#ui", $this->url, $match)) { array_shift($match); Request::$attr = $match; $this->action = $param; return $this->action = $param; } } }
/** * Загружаем все необходимые данные и запускаем выполнение метода контроллера */ public static function start() { set_error_handler("self::show_errors"); // изменение отображения ошибок по умолчанию Liw::$config = (require_once LIW_WEB . 'config/config.php'); try { Session::start(); Request::getRequest(); self::loadLanguage(Request::$lang); self::run(new Router(include LIW_WEB . "config/ways/all.php")); } catch (\Exception $e) { self::show_errors($e->getCode(), $e->getMessage(), $e->getFile(), $e->getLine()); } }
/** * Загружаем все необходимые данные и запускаем выполнение метода контроллера */ public static function start() { Liw::$config = (require_once LIW_WEB . 'config/config.php'); ErrorHandler::register(); try { Session::start(); Request::getRequest(); Lang::checkLanguage(Request::$lang); Router::getWay(Request::$route, AccessMulti::getWays()); Router::run(); } catch (\Exception $e) { ErrorHandler::showError("Exception", $e->getMessage(), $e->getFile(), $e->getLine()); } }
/** * @param $route * @param $ways * @return array * @throws \Exception */ public static function getWay($route, $ways) { foreach (array_keys($ways) as $way) { $regs = []; if (mb_ereg(self::createRegV($way), $route, $regs)) { if (count($regs) > 1) { array_shift($regs); self::$attr = $regs; } else { self::$attr = array_intersect_key(explode('/', $route), self::$var_positions); } /** * Возвращаем название контроллера и метода в нем */ self::$way = $ways[$way]; if (count(self::$way) >= 2) { if (!array_key_exists('method', self::$way)) { self::$way['method'] = self::$way[1]; } } if (isset(self::$way['method']) && !self::checkMethod(self::$way['method'])) { throw new \Exception('Методе передачи данных (GET, POST...) не соответствет указанному в файле роутинга.'); } if (!array_key_exists('action', self::$way)) { if (isset(self::$way[0])) { self::$way['action'] = self::$way[0]; } else { throw new \Exception('Ошибка синтаксиса в фале роутинга.'); } } /** * Возвращаем массив, ключи которого */ Request::$attr = array_merge(self::$attr, Request::$attr); return self::$way; } } throw new \Exception(Lang::uage('error_no_route') . $route); }
/** * Метод рендерит страницу, которая находится по маршруту LIW_WEB . 'views/' . $folder . '/' . $view . '.php' * В вид передается массив $attr пропущенный через функцию extract, что делает в нем доступными переменные, * соответствующие ключам массива. * * @param $folder * @param $view * @param null $attr * @throws \Exception */ public function render($folder, $view, $attr = null) { if (!empty(ob_get_contents())) { ob_end_clean(); } ob_start(); $this->view_path = LIW_WEB . 'views' . DIRECTORY_SEPARATOR . $folder . DIRECTORY_SEPARATOR . $view . '.php'; if (is_file($this->view_path)) { $this->view_folder = $folder; if (isset($attr) && is_array($attr)) { $this->attr = $attr; extract($attr, EXTR_OVERWRITE); } /** * Добавляем панель разработчика, если выставлен соответствующий флаг */ if (defined('DEVELOP') && DEVELOP === true) { include __DIR__ . '/develop/view/develop_panel.php'; } include $this->view_path; } else { throw new \Exception('File: ' . $this->view_path . ' not exist!'); } if (Request::isAjax()) { echo ob_get_clean(); return; } $this->view = ob_get_clean(); /** * нужен особый вывод ошибок, т.к. ошибка в лэйауте будет выводиться дважды, как обычная ошибка, и как ошибка * внутри вывода ошибки. */ require LIW_WEB . 'views/layouts/' . self::$layout . '.php'; //подключение layout }
public function showError($error) { $this->view = $error; if (Request::isAjax()) { echo '<div class="error">' . $error . '</div>'; return; } require_once LIW_CORE . 'core/error/view/index.php'; }