コード例 #1
0
ファイル: Router.php プロジェクト: ricco381/liw-core
 /**
  * Провека на совпадение адресной 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;
         }
     }
 }
コード例 #2
0
ファイル: App.php プロジェクト: ricco381/liw-core
 /**
  * Загружаем все необходимые данные и запускаем выполнение метода контроллера
  */
 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());
     }
 }
コード例 #3
0
ファイル: App.php プロジェクト: Razzwan/core
 /**
  * Загружаем все необходимые данные и запускаем выполнение метода контроллера
  */
 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());
     }
 }
コード例 #4
0
ファイル: Router.php プロジェクト: Razzwan/core
 /**
  * @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);
 }
コード例 #5
0
ファイル: View.php プロジェクト: ricco381/liw-core
 /**
  * Метод рендерит страницу, которая находится по маршруту 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
 }
コード例 #6
0
ファイル: View.php プロジェクト: Razzwan/core
 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';
 }