2017 © Pedro Peláez
 

library router

Router for Infrajs

image

infrajs/router

Router for Infrajs

  • Monday, March 19, 2018
  • by akiyatkin
  • Repository
  • 1 Watchers
  • 0 Stars
  • 766 Installations
  • PHP
  • 21 Dependents
  • 0 Suggesters
  • 0 Forks
  • 1 Open issues
  • 20 Versions
  • 1 % Grown

The README.md

Роутер Infrajs

Включает: - Работа коротких адресов с символами -~! для сторонних вендоров - infrajs/config-search - Автоматическую инсталяцию расширений - infrajs/update - Конфиг .infra.json расширений автоматически загружается и выполняется при обращени к любому классу расширения - infrajs/config - простейшие уровни доступа test debug admin - infrajs/access - HTTP-заголовки по умолчанию от расширений - infrajs/nostore, infrajs/access - контроллер слоёв index.json - infrajs/controller, (*1)

Использовние

Рабочей папкой php скриптов должен быть корень проекта. Это важное требование для совместимости infrajs/path. Изменить рабочую папку очень просто с помощью станадртной php функции chdir, (*2)

use infrajs\router\Router;
use infrajs\path\Path;
if (!is_file('vendor/autoload.php')) {
    chdir('../../../'); //Путь до корня проекта с папкой vendor/
    require_once('vendor/autoload.php');    
    Router::init();
}
$src = Path::theme('-plugin/test.php'); //vendor/name/plugin/test.php

Если настроен .htaccess, (*3)

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ vendor/infrajs/router/index.php [L,QSA]

Сокращения будут работать в адресной строке -test/test.php. из скрипта можно убрать Router::init(), chdir() и vendor/autoload.php, они уже будут выполнены в vendor/infrajs/router/index.php, указанному в .htaccess., (*4)

use infrajs\path\Path;

$src = Path::theme('-test/test.php'); //vendor/test/test.php

Инициализация роутера в скрипте

Для независимой работы расширения можно оставлять возможность прямого обращения к нему, без сокращений -, тогда в код нужно добавить вызов '''Router::init();'''. Это требуется для инициализации и выполнения конфигов (.infra.json) самого расширения и его зависимостей., (*5)

if (!is_file('vendor/autoload.php')) {
    chdir('../../../');
    require_once('vendor/autoload.php');
    Router::init();
}

или самый универальный вариант, (*6)

if (!is_file('vendor/autoload.php')) chdir('../');
require_once('vendor/autoload.php');
Router::init();

Перенаправить запросы на свой php файлы

С точки зрения роутера все запросы, для которых не найдено файла, являются 404 ошибкой. По этому нужно определить 404 страницу, как php файл, на который и будут приходить все запросы. Нужно создать файл .infra.json в корне проекта., (*7)

{
    "router":{
        "404":"index.php"
    }
}

.htaccess только для сокращённых адресов

RewriteEngine on
RewriteCond %{REQUEST_URI} ^/[-~\!]
RewriteRule ^(.*)$ vendor/infrajs/router/index.php [L,QSA]

The Versions