infrajs / router
Router for Infrajs
Installs: 2 471
Dependents: 22
Suggesters: 0
Security: 0
Stars: 0
Watchers: 2
Forks: 0
Open Issues: 1
Requires
- akiyatkin/error: ~1
- infrajs/access: ~1
- infrajs/config: ~1
- infrajs/controller: ~1
- infrajs/env: ~1
- infrajs/nostore: ~1
- infrajs/path: ~1
- infrajs/update: ~1
README
Включает:
- Работа коротких адресов с символами -~! для сторонних вендоров - infrajs/config-search
- Автоматическую инсталяцию расширений - infrajs/update
- Конфиг .infra.json расширений автоматически загружается и выполняется при обращени к любому классу расширения - infrajs/config
- простейшие уровни доступа test debug admin - infrajs/access
- HTTP-заголовки по умолчанию от расширений - infrajs/nostore, infrajs/access
- контроллер слоёв index.json - infrajs/controller
Использовние
Рабочей папкой php скриптов должен быть корень проекта. Это важное требование для совместимости infrajs/path. Изменить рабочую папку очень просто с помощью станадртной php функции chdir
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
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
.
use infrajs\path\Path; $src = Path::theme('-test/test.php'); //vendor/test/test.php
Инициализация роутера в скрипте
Для независимой работы расширения можно оставлять возможность прямого обращения к нему, без сокращений -, тогда в код нужно добавить вызов '''Router::init();'''. Это требуется для инициализации и выполнения конфигов (.infra.json) самого расширения и его зависимостей.
if (!is_file('vendor/autoload.php')) { chdir('../../../'); require_once('vendor/autoload.php'); Router::init(); }
или самый универальный вариант
if (!is_file('vendor/autoload.php')) chdir('../'); require_once('vendor/autoload.php'); Router::init();
Перенаправить запросы на свой php файлы
С точки зрения роутера все запросы, для которых не найдено файла, являются 404 ошибкой. По этому нужно определить 404 страницу, как php файл, на который и будут приходить все запросы. Нужно создать файл .infra.json в корне проекта.
{ "router":{ "404":"index.php" } }
.htaccess только для сокращённых адресов
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/[-~\!]
RewriteRule ^(.*)$ vendor/infrajs/router/index.php [L,QSA]