Включает:
- Работа коротких адресов с символами -~! для сторонних вендоров - 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();
С точки зрения роутера все запросы, для которых не найдено файла, являются 404 ошибкой. По этому нужно определить 404 страницу, как php файл, на который и будут приходить все запросы. Нужно создать файл .infra.json в корне проекта.
{
"router":{
"404":"index.php"
}
}
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/[-~\!]
RewriteRule ^(.*)$ vendor/infrajs/router/index.php [L,QSA]