Тема: [Релиз] Разработка расширения "Developer Helper"
Привет всем, кто читает тему.
Разговор пойдет о создании расширения "Developer Helper", предполагается, что читатель - разработчик расширений для punbb, поэтому если это не так, то читать дальше смысла нет.
Выявление проблемы
Разные расширения по разному решают проблемы, решением которых по сути должно заниматься ядро. Например обеспечение доступа к глобальным переменным. Типичное решение в функции - объявление globals. Где-то в сети мне попадались исследования, свидетельствующие о том, что этот путь медленнее доступа к статическому свойству класса.
Ядро форума не дает возможности осуществлять роутинг к контроллерам. Например некое расширение желает использовать путь из запроса GET для запуска соответствующего контроллера: misc.php?r=myextension/foo/bar , а нужного механизма нет.
Решение
Для доступа из любого места в коде к глобальным переменным, например
$forum_db, $forum_user, $forum_page, $forum_url, $forum_hooks вводим класс (например App) с одноименными статическими свойствами, инициализируемыми как ссылки на эти глобальные переменные.
В хуке es_essentials этот класс подключается и инициализируется.
Теперь любое расширение, явно зависимое от Developer Helper может в своих функциях и классах получить доступ к глобальной переменной без предварительного объявления через globals например: App::$forum_user['is_guest']
Второй момент - роутинг.
Расширение явно зависимое от Developer Helper может использовать соглашение о роутинге, т.е. если в запросе misc.php? есть параметр r, то Developer Helper попытается его обработать исходя из предположения, что r - это путь к контроллеру какого-либо расширения, например misc.php?r=myextension/foo/bar означает расширение myextension, класс контроллера foo метод контроллера bar. Для реализации этого механизма, в хуке mi_new_action вызывается например App::route();, в котором эта магия и реализована. При этом не нужно изобретать велосипед, магия копируется с небольшими изменениями из yii или kohana
Можно пойти дальше, реализовать autoload классов, хелперы для вывода html тегов, кеширование, инъекции кода в хуки в рантайм, без манифестов и т.п.
Какие из всего этого плюсы? Стандартизация, упрощение разработки, использование ООП + MVC и тп.
Интересует ли такой вектор развития кого-нибудь, желает ли кто-то присоединиться словом и делом? Может есть весомые аргументы против?