Я у себя сейчас экспериментирую с переписыванием всего на контроллеры. Поделюсь мыслями, может натолкну на идею или вы мне подскажите, где можно улучшить.
Значит, в ядре грузится конфиг, создаётся и заполняется DI контейнер со всякими полезными штуками типа pdo и шаблонизатора. Из глобальных переменных доступны только $config и $container. Далее, на странице модуля (к примеру forum/index.php), создаётся объект контроллера, наследуемого от PageController. На нужной странице вызывается соответствующий метод action из этого контроллера (actionSay(), actionShowTopic()). Внутри такого метода происходит обработка и заполнение данных для шаблонизатора. В самом конце вызывается метод renderPage с указанием пути к шаблону и передаётся массив данных. Так выводится полноценная страница.
При этом хэдер и футер обрабатывается в PageController только если был вызван метод renderPage. Всё так же заполняем массив данных и объединяем с тем массивом из action'а, получаем данные, необходимые для вывода всей страницы вместе с хэдером и футером.
Получается так:
class ForumController extends \Core\Controllers\PageController {
public function actionIndex() {
$this->title = 'Форум'; // эти две переменные нужны только
$this->module = 'forum'; // для регистрирования перемещений
// логика
$this->renderPage('forum/index.twig', [
'sections' => $sections,
]);
}
}
$controller = new ForumController();
$controller->actionIndex();Пока что вызов ядра и вот этих action'ов приходится делать вручную. Единую точку входа в корневой index.php придётся потом сделать, когда у каждого модуля будет по одному контроллеру и одной точке входа.
Вот в джон шаблонизатор осталось только ввести и можно будет значительно улучшить архитектуру.