View file index.php

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;