Buga

Ядро Buga

Самая суть системы

Если вы разобрались с механизмом хуков, знаете и понимаете как функционирует эта кухня, то понять принцип работы ядра Buga, для вас труда не составит потому , что никакого ядра на самом деле нет.

Механизм хуков и есть ядро системы.

А как же точка входа ? Где этапы выполнения скрипта к чему цеплять и от чего стартовать хуки ?? Спокойствие, давайте для начала составим самый общий план работы скрипта в виде массива php: 

$steps = [
    'init', // начальная стадия установка настроек сайта
    'request', // разбор url запроса от пользователя
    'work', // работа основной алгоритм
    'end' //   конец
];

Вот этот массив и есть наши начальные хуки которые мы запустим на выполнение в цикле, мы назовем  этот массив  шагами steps.

И еще разок для понимания: берем масcив шагов steps и запускаем в работу первый шаг init - это есть самый обычный хук (для нас точка входа). Выполняем хук init : 

doHook('init', $args);

Потом переходим к следующему шагу request - запускаем в обработку этот хук ну и так далее до самого конца - end. Таким образом у нас вся CMS это сплошные хуки и хукфункции которые цепляться к ним. Хукфункции - буду использовать этот термин для обазначение функции которая цепляется к хуку, чтобы не путаться в дальнейшем с хуком.

Так вот в хукфункция могут запускаться другие хуки , а в этих хуках есть свои хукфункции в которых также могут быть хуки и так далее и тп. Глубина погружения у нас будет ограничена 32-мя уровнями, это так на всякий случай, чтобы не зависло все.

Масcив steps в процессе выполнения скрипта может дополнятся другими шагами. Возьмем шаг request - здесь мы производим разбор url. Что пользователь хочет получить от сайта какую категорию, пост или страницу? Далее, в зависимости от запроса, в массив steps добавляются новые шаги. Здесь на сайте, внизу страницы, последовательность степов всегда отображается вот так:
 init ⇒ request ⇒ work ⇒ post ⇒ atom ⇒ index ⇒ html ⇒ end

Походите по сайту вы увидите как меняется эта строка.

Код хуков и степов собран в классе Dispatcher расположение core/Dispatcher.php .