File size: 3.1Kb
<?php
/**
* Neiron Core
* @author KpuTuK
* @link https://github.com/KpuTuK
**/
define('ROOTPATH', realpath(__DIR__) .'/');
define('SYSPATH', ROOTPATH .'System/');
define('MODULEPATH', ROOTPATH .'Modules/');
define('CACHEPATH', ROOTPATH .'Cache');
define('TPLPATH', ROOTPATH .'Templates/');
// Подключаем файл функций
require_once SYSPATH .'Functions.php';
// Подключаем файл настроек
require_once SYSPATH .'Bootstrap.php';
// Ядро
require_once SYSPATH .'Core.php';
// Вывод
$GLOBALS['_APP']['output'] = (string)'';
// Флаг наличия модуля
$appExists = false;
// Прогоняем массив роутов
foreach ((array)$GLOBALS['_APP']['routes'] as $route) {
// Если в паттерне роута обнаружен шаблон
if (false !== strpos($route['pattern'], '{')) {
// Обрабатываем его через регулярку
$route['pattern'] = preg_replace_callback('#\{(\w+):(\w+)\}#', function ($match) {
$patterns = array(
'i' => '[0-9]+',
's' => '[a-zA-Z0-9\.\-_%]+',
);
list(, $name, $prce) = $match;
return '(?<' . $name . '>' . strtr($prce, $patterns) . ')';
}, $route['pattern']);
}
// Проверяем не совпадает ли наш шаблон с текущим URI
if (rtrim($_SERVER['REQUEST_URI'], '/') === rtrim($route['pattern'], '/')) {
// Если найдена директория и файл роута
if (file_exists(MODULEPATH . $route['dir'] . DIRECTORY_SEPARATOR . $route['file'] .'.php')) {
$appExists = true;
// Подключаем их
require_once MODULEPATH . $route['dir'] . DIRECTORY_SEPARATOR . $route['file'] .'.php';
break;
}
// Проверяем наш шаблон регуляркой
} elseif(preg_match('#^' . rtrim($route['pattern'], '/') . '$#s', rtrim($_SERVER['REQUEST_URI'], '/'), $matches)) {
// Удаляем все числовые ключи!!!!!
foreach ($matches as $key => $value) {
if (is_int($key)) {
unset($matches[$key]);
}
}
// Записываем все получившеися значечия в $_GET
$GLOBALS['_GET'] = array_merge($GLOBALS['_GET'], $matches);
// Если найдена директория и файл роута
if (file_exists(MODULEPATH . $route['dir'] . DIRECTORY_SEPARATOR . $route['file'] .'.php')) {
$appExists = true;
// Подключаем их
require_once MODULEPATH . $route['dir'] . DIRECTORY_SEPARATOR . $route['file'] .'.php';
break;
}
}
}
if ($appExists === false) {
// Или выдаем 404
$GLOBALS['_GET']['code'] = 404;
require MODULEPATH .'Home/err.php';
}
// Чистим БВ
ob_end_flush();
// Выдаем страничку
echo $GLOBALS['_APP']['output'];
// Завершаем скриптег
exit;