«Основной обработчик»: /npj/classes/NpjRequestHandler.php
Примечание:
class NpjRequestHandler extends RequestHandler (адрес последнего:
/core/classes/RequestHandler.php)
1) Для создания объекта
$rh вызывается конструктор
NpjRequestHandler("config.php")
2) При конструировании
$rh сначала вызывается метод
RequestHandler::RequestHandler() (собственно, это конструктор класса
RequestHandler), с файлом
config.php в виде параметра.
a) config.php, в свою очередь, подключает следующие файлы конфигурации:
- core/config.php
- npj/config.php
- config_tunes.php
- config_db.php
- config_modules.php
б) RequestHandler() подключает с помощью метода RequestHandler::UseClass() (это обертка для require(), по сути) следующие классы:
- Debug
- DBAL – /core/classes/DBAL_adodb.php
- StateSet
- Principal
- TemplateEngine
- ObjectCache
3) В результате объект
$rh содержит все настройки и переменные, нужные для работы, и может вызывать методы для разбора URL, понимаемого как команда программе, чтобы передать управление обработчику этой команды. Главный метод для этой цели:
$rh->_HandleRequest() (который вызывает, в свою очередь, другие приватные методы).
(Правильно заметили разработчики в комментах: NpjRequestHandler::_HandleRequest() – это holy crap!)
Что читать дальше
Моего пера:
$rh – детали реализации.
Документация по разбору URLа где-то была, а вот все ссылки на доки по Манифесто сдохли.
Но для знакомства с общей концепцией можно читать доки к Rocket, который мало того что те же люди делали, так еще, подозреваю, значительная часть кода Manifesto перешла в него без особых исправлений
(впрочем, здесь я могу сильно ошибаться).
В общем, читать:
Общее устройство ядра Rocket
Диаграммы обработки основного запроса – RequestHandler
Движок шаблонов RocketTE
В комментах к RequestHandler из Rocket написано: "[RequestHandler] организует последовательность обработки и функциональное окружение. Служит мостом для сообщения между собой подключаемых модулей".
А на диаграмме Николая Яремко указаны два главных направления обработки запроса: 1) с редиректом (запросить другую страницу, попутно что-то сделать с данными) и 2) без редиректа (обработать данные, модифицировать текущую страницу) – ЭТО ВАЖНО!
Всплыли еще вот такие подробности (достаточно, в принципе, чтобы уяснить себе общее устройство модулей):
Сторонние модули
Небольшое руководство для написания модулей
| САМЫЙ ГЛАВНЫЙ ОБЪЕКТ В НПЖ называется $rh, класс NpjRequestHandler |