/** * Module initialization. * * @param array $params Initialization parameters collection * @return bool Initialization result */ public function init(array $params = array()) { //[PHPCOMPRESSOR(remove,start)] // Create SamsonPHP routing table from loaded modules $rg = new GenericRouteGenerator($this->system->module_stack); // Generate web-application routes $routes = $rg->generate(); $routes->add($this->findGenericDefaultAction()); // Create cache marker $this->cacheFile = $routes->hash() . '.php'; // If we need to refresh cache if ($this->cache_refresh($this->cacheFile)) { $generator = new Structure($routes, new \samsonphp\generator\Generator()); // Generate routing logic function $routerLogic = $generator->generate(); // Store router logic in cache file_put_contents($this->cacheFile, '<?php ' . "\n" . $routerLogic); } require $this->cacheFile; //[PHPCOMPRESSOR(remove,end)] // This should be change to receive path as a parameter on initialization $pathParts = explode(Route::DELIMITER, $_SERVER['REQUEST_URI']); SamsonLocale::parseURL($pathParts); $this->requestURI = implode(Route::DELIMITER, $pathParts); // Subscribe to samsonphp\core routing event \samsonphp\event\Event::subscribe('core.routing', array($this, 'router')); // Continue initialization return parent::init($params); }
/** * Розпарсить URL */ public function parse() { // Обнулим параметры $this->text = NULL; $this->parameters = array(); $this->method = NULL; $this->module = NULL; $this->last = NULL; // Розпарсим URL $url = parse_url($_SERVER["REQUEST_URI"]); // Получим только путь из URL $url = $url['path']; // Отрежем путь к текущему веб-приложению из пути и декодируем другие символы $url = trim(urldecode(substr($url, strlen(__SAMSON_BASE__)))); // Установим базовый путь к приложению $this->base = __SAMSON_BASE__; // Получим массив переданных аргументов маршрута системы из URL // Отфильтруем не пустые элементы, не переживая что мы упустим поряд их следования // так номера элементов в массиве сохраняются $url_args = explode('/', $url); // Clear last element if it's empty string $lidx = sizeof($url_args) - 1; if (!isset($url_args[$lidx][0])) { unset($url_args[$lidx]); } SamsonLocale::parseURL($url_args); Event::fire('samson.url.args.created', array(&$this, &$url_args)); //trace( $url_args, true ); // Переберем все аргументы и маршрута системы foreach ($url_args as $position => $value) { // Получим аргумент из URL $arg = filter_var($value, FILTER_DEFAULT); // Определим тип аргумента switch ($position) { // 1-й аргумент это всегда имя модуля case 0: $this->module = $arg; break; // 2-й аргумент это всегда имя метода модуля // 2-й аргумент это всегда имя метода модуля case 1: $this->method = $arg; break; // Все остальные аргументы это параметры вызываемого метода // Все остальные аргументы это параметры вызываемого метода default: // Если в значение аргумента есть запятые - это массив //if( strpos( $arg, ',' ) !== FALSE ) $arg = explode( ',', $arg ); // Добавим аргумент как параметр $this->parameters[] = $arg; } } // Сохраним "чистый" текст URL $this->text = $url; // Получим последний аргумент из URL $this->last = isset($position) ? $url_args[$position] : ''; // If we have only one parameter and it is empty - remove it //if( sizeof($this->parameters) == 1 && !isset($this->parameters[0]{1})) unset($this->parameters[0]); // Если не создан массив прошлых URL - маршрутов, создадим его if (!isset($_SESSION[self::S_PREVIOUS_KEY])) { $_SESSION[self::S_PREVIOUS_KEY] = array(); } // Если не создан массив прошлых URL - маршрутов, создадим его if (!isset($_SESSION[self::S_BOOKMARK_KEY])) { $_SESSION[self::S_BOOKMARK_KEY] = array(); } // Фильтруем аяксовые запросы if (isset($_SERVER['HTTP_ACCEPT']) && $_SERVER['HTTP_ACCEPT'] != '*/*') { // Запишем в сессию объект URL для хранения параметров предыдущего маршрута array_unshift($_SESSION[self::S_PREVIOUS_KEY], serialize($this)); // Если стек разросься обрежим его if (sizeof($_SESSION[self::S_PREVIOUS_KEY]) > self::S_PREVIOUS_SIZE) { $_SESSION[self::S_PREVIOUS_KEY] = array_slice($_SESSION[self::S_PREVIOUS_KEY], 0, self::S_PREVIOUS_SIZE); } } }
/** * Module initialization. * * @param array $params Initialization parameters collection * @return bool Initialization result */ public function init(array $params = array()) { //[PHPCOMPRESSOR(remove,start)] // Create SamsonPHP routing table from loaded modules $rg = new GenericRouteGenerator($this->system->module_stack); // Generate web-application routes $routes = $rg->generate(); $routes->add($this->findGenericDefaultAction()); // Create cache marker $this->cacheFile = $routes->hash() . '.php'; // If we need to refresh cache if ($this->cache_refresh($this->cacheFile)) { $generator = new Structure($routes, new \samsonphp\generator\Generator()); // Generate routing logic function $routerLogic = $generator->generate(); // Store router logic in cache file_put_contents($this->cacheFile, '<?php ' . "\n" . $routerLogic); } require $this->cacheFile; //[PHPCOMPRESSOR(remove,end)] // Set locale resolver mode SamsonLocale::$leaveDefaultLocale = $this->browserLocaleRedirect; // This should be change to receive path as a parameter on initialization $pathParts = array_values(array_filter(explode(Route::DELIMITER, $_SERVER['REQUEST_URI']))); // Parse URL and store locale found bug $localeFound = SamsonLocale::parseURL($pathParts, $this->browserLocaleRedirect); // Gather URL path parts with removed locale placeholder $this->requestURI = implode(Route::DELIMITER, $pathParts); // Get localization data $current = SamsonLocale::current(); $default = SamsonLocale::$defaultLocale; // Browser agent language detection logic if ($this->browserLocaleRedirect && !$localeFound) { // Redirect to browser language $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); // Is browser language supported by application $langSupport = in_array($lang, SamsonLocale::get(), true); /** * If browser language header is supported by our web-application and we are already not on that locale * and current locale is not default. */ if ($current === $default && $current !== $lang && $langSupport) { header('Location: http://' . $_SERVER['HTTP_HOST'] . '/' . $lang . '/' . $this->requestURI); exit; } elseif (!$langSupport || $lang === $current) { SamsonLocale::$leaveDefaultLocale = false; } } // Subscribe to samsonphp\core routing event \samsonphp\event\Event::subscribe('core.routing', array($this, 'router')); // Continue initialization return parent::init($params); }