Введение
InstantCMS является модульной системой, построенной с использованием MVC-архитектуры.
Модульные блоки, из которых собирается функционал сайта, в InstantCMS называются Компонентами.
В свою очередь, каждый компонент состоит из трех основных частей: контроллера, модели и шаблонов. Компонент может содержать как все эти части одновременно, так и любое их сочетание по-отдельности.
Автоматическая загрузка классов
InstantCMS автоматически загружает классы из директорий:
- system/core/ - имя класса должно начинаться на cms. Например, класс cmsAction, его файл system/core/action.php. Это системные классы.
- system/fields/ - имя класса должно начинаться на field. Например, класс fieldDate, его файл system/fields/date.php. Это классы полей форм.
- system/controllers/NAME/model.php - имя класса должно начинаться на model. Например, класс modelUsers, его файл system/controllers/users/model.php. Это классы моделей контроллеров.
Также поддерживаются загрузки классов по пространствам имён.
namespace должен начинаться на icms\ а дальше полный путь к файлу относительно директории system. Например:
use icms\traits\controllers\actions\listgrid;
Подключит файл system/traits/controllers/actions/listgrid.php
В InstantCMS есть класс, управляющий автозагрузкой классов - cmsAutoloader
(>= 2.17.0). Он имеет публичный метод:
cmsAutoloader::register(string $namespace, string $directory) : void // Пример подключения // Первым параметром передаём базовое пространство имён библиотеки // Вторым параметром относительный путь от корня установки InstantCMS cmsAutoloader::register('PHPMailer\PHPMailer', 'system/libs/phpmailer/');
С его помощью вы можете добавлять библиотеки в очередь автозагрузки. Как правило, это будут сторонние библиотеки со своими пространствами имён.
Есть предустановленная конфигурация для некоторых сторонних классов, использующихся в InstantCMS. Она находится по пути /system/config/autoload.php
. Не забывайте, что директория /system/config/ может быть переопределена.
InstantCMS поддерживает Composer. Предполагается, что пакеты Composer устанавливаются из корневой директории установки InstantCMS, движок ищет файл автозагрузчика Composer в /vendor/autoload.php.
Контроллеры
Контроллер - основная часть компонента, в которой находится вся бизнес-логика. Задача контроллера - получить запрос от пользователя, обработать его и вернуть результат (например, HTML-страницу или JSON).
Каждый компонент может иметь 2 контроллера - frontend и backend, которые работают в пользовательской и административной части сайта соответственно.
Модели
Модель - часть компонента, содержащая логику по извлечению, изменению и сохранению данных. Модель получает запросы из контроллера и возвращает ему результаты из базы данных, либо наоборот, сохраняет изменения в базе.
Шаблоны
Шаблоны служат для форматирования данных перед выводом их пользователю. Шаблон содержит в себе HTML-разметку и минимум программного кода - только в том объеме, который необходим для форматирования вывода. Данные в шаблон передаются контроллером.
Схема работы
Каждый запрос пользователя (открытие страницы в браузере) запускает следующий рабочий процесс:
- Запускается файл index.php;
- Роутер определяет какой компонент был запрошен и запускает его контроллер;
- Контроллер получает параметры запроса из URL, либо из формы заполненной пользователем;
- Контроллер получает (или сохраняет) данные через модель;
- Контроллер обрабатывает данные необходимым образом;
- Контроллер вызывает шаблон и передает в него полученные (или обработанные) данные;
- Шаблон формирует конечную HTML-страницу, которая возвращается пользователю.
Таким образом, основная логика (большая часть кода) находится в контроллере.
В следующих разделах документации мы разберем более детально устройство контроллеров, моделей и шаблонов.