EE_FrameWork — это PHP-фреймворк с MVC-ядром, встроенным административным контуром, гибкой контентной моделью и upgrade-safe слоем проектной кастомизации через custom/.
Проект ориентирован на разработку не шаблонных сайтов, а систем, где важны:
- управляемая архитектура без избыточной магии;
- быстрый старт для нового разработчика;
- встроенная админ-панель;
- гибкая модель сущностей, свойств, категорий и страниц;
- расширяемость без правок ядра;
- готовность к реальному production-использованию.
EE_FrameWork объединяет в одном репозитории:
- HTTP entrypoint и MVC-поток обработки запроса;
- Router, View, Cache, Hook, Auth и logging-слой;
- административный модуль для управления контентом и системой;
- проектный слой
custom/, который не должен теряться при обновлении ядра; - встроенные механизмы для поиска, фильтрации, lifecycle-синхронизации, агентного cron и работы со свойствами сущностей.
Это не микрофреймворк и не “голая CMS-тема”. Это основа для развития собственных проектов и сложных контентных систем.
Поток запроса остаётся прозрачным:
URL -> Router -> Controller -> Model -> View -> Layout -> Response
Это упрощает:
- отладку;
- онбординг новых разработчиков;
- развитие проекта без скрытых магических слоёв.
В проект уже входит admin-модуль, который покрывает:
- пользователей и роли;
- свойства, типы свойств и наборы;
- типы категорий, категории и страницы;
- импорт;
- логи;
- системные инструменты;
- health/operational сценарии.
Дополнительно в ядре предусмотрены role-based auth hooks, которые позволяют проекту управлять разделением контуров /admin, /manager и /user через custom/hooks.php, не зашивая project policy в core.
EE_FrameWork поддерживает связку:
property types -> properties -> sets -> category types -> categories -> pages
Это позволяет строить сложные модели данных без жёсткой привязки к одной предметной области.
В платформе есть штатная поддержка двух обязательных документов:
- Политика в отношении обработки персональных данных;
- Согласие на обработку персональных данных.
Для пользователя сохраняется не только сам факт принятия, но и metadata:
- дата и время;
- IP;
- user-agent;
- версия документа.
Это работает и в обычной регистрации, и в обязательном consent-gate для существующих аккаунтов.
Проектный код не должен жить в ядре.
Для этого есть:
app/— маршруты, контроллеры, views, модульныеjs/css;custom/— project-specific hooks, bootstrap и сервисные классы, которые не нужно терять при обновлении платформы.
В ядре уже предусмотрены:
- кэширование;
- логирование;
- аутентификация и доступ;
- routing cache и HTML cache;
- агентный cron и очереди фоновой обработки;
- резервное копирование через очередь и offsite targets SFTP/FTP;
- lifecycle jobs;
- операции обслуживания системы;
- поисковая и фильтрационная подсистемы.
EE_FrameWork особенно хорошо подходит для:
- кастомных CMS и контентных платформ;
- каталогов и экспертных систем;
- информационных проектов со сложной структурой сущностей;
- административных back-office систем;
- платформ, которые должны эволюционировать в сторону маркетплейса, кабинетов, интеграций и тяжёлой бизнес-логики.
- PHP
8.0+ - MySQL/MariaDB
- PHP-расширения:
pdoи драйвер вашей СУБДmbstringjsonsessionfileinfoopensslcurl
- Redis опционален, если нужен Redis backend для кэша
Веб-процесс должен иметь доступ на запись в:
cache/logs/uploads/
Ядро само подготавливает обязательные runtime-директории при install/bootstrap-проверке:
cache/logs/logs/errors/uploads/uploads/tmp/uploads/tmp/backups/uploads/files/uploads/images/uploads/images/avatars/
Практически лучше использовать:
- общего владельца или общую группу для CLI и web;
- SGID/наследование группы для
logs/иcache/, чтобы фоновые задачи и веб не конфликтовали по правам.
Важно:
- после клона разработчик не должен править ядро;
- штатно редактируется только
inc/configuration.php; - если runtime-папка отсутствует или недоступна для записи, install-check завершится явной ошибкой.
Для первого smoke-теста достаточно:
php -S 127.0.0.1:8080 -t .После этого можно проверить:
http://127.0.0.1:8080/index.phpphp inc/cli.php help
Важно:
- встроенный сервер удобен для первого запуска и bootstrap-проверки;
- для полноценных красивых URL нужен Apache/Nginx с rewrite-правилами.
На верхнем уровне запрос проходит так:
index.phpпроверяет окружение;- подключается
inc/bootstrap.php; inc/bootstrap.phpзагружает чистый config изinc/configuration.php, вычисляет runtime-константы и подключаетinc/startup.php;- вызывается runtime bootstrap;
- поднимаются core-сервисы и
custom/; Routerопределяет контроллер и action;- управление передаётся контроллеру.
Важно:
inc/configuration.phpпредназначен только для настроек;- runtime-хелперы, вычисляемые значения, redirect-политика и ранний bootstrap живут в
inc/bootstrap.php.
Единый install/deploy-источник схемы БД — это classes/system/Users.php, метод createTables().
Что это значит на практике:
- install создаёт базовый набор таблиц через
Users::createTables(); - subsystem-инфраструктура поднимается из install-контура с явным
force=true; - runtime-сервисы больше не должны делать
CREATE TABLE/ALTER TABLEво время обычных web/CLI-запросов.
Роль файлов констант такая:
classes/system/Constants.php— рабочий файл констант ядра;classes/system/Constants_clean.php— чистая копия для синхронизации и контроля изменений.
Они не являются двумя разными механизмами схемы БД. Источник развёртывания один: install/deploy-контур ядра.
В GitHub-репозиторий должны попадать:
- ядро фреймворка;
custom/как project layer;- документация;
- hand-crafted артефакты проекта, если они нужны как часть исходников.
В репозиторий не должны попадать:
cache/logs/uploads/- экспортные ZIP-пакеты
- боевой
inc/configuration.php
.gitignore уже настроен под этот сценарий.
Продуктовая документация лежит в custom/docs/.
Базовые разделы уже включают:
- архитектуру;
- routing;
- content model;
- импорт;
- cron-агенты;
- backup;
- debug/health.
README.md должен оставаться короткой входной точкой для разработчика, а подробные сценарии поддержки и эксплуатации — жить в custom/docs/.
Быстрый способ добавить собственный маршрут — новый модуль в app/.
Пример структуры:
app/hello/
├─ index.php
├─ views/
│ └─ v_index.php
├─ js/
└─ css/
Пример контроллера:
<?php
use classes\system\ControllerBase;
class ControllerHello extends ControllerBase {
public function index($params = []): void {
$this->view->set('message', 'Hello from EE_FrameWork');
$this->html = $this->view->read('v_index');
$this->parameters_layout['layout_content'] = $this->html;
$this->showLayout($this->parameters_layout);
}
}Пример шаблона:
<?php if (!defined('ENV_SITE')) exit(header('Location: /', true, 301)); ?>
<h1><?= htmlspecialchars((string) ($message ?? ''), ENT_QUOTES) ?></h1>После этого маршрут будет доступен по:
/hello
/index.php HTTP entrypoint
/inc/ bootstrap, configuration, core hooks, language files
/classes/system/ ядро платформы
/classes/helpers/ helper- и service-классы
/app/ модули, контроллеры, views, js/css, модели
/app/docs/ docs-модуль как обычный маршрут
/custom/ upgrade-safe слой проектной логики
/custom/docs/ исходники пользовательской документации
/layouts/ layout-шаблоны
/assets/ фронтовые и редакторские ассеты
/uploads/ пользовательские файлы
/app/cron/ только scheduler-wrapper'ы для реальных cron-задач
/inc/cli.php единый CLI entrypoint для cron, diagnostics и ops
/error.php штатная обработка ошибок
В app/:
- маршруты;
- контроллеры;
- views;
- модульные
js/css; - модели, относящиеся к конкретному модулю.
В custom/:
- проектные hooks;
- custom bootstrap;
- сервисные классы проекта;
- интеграционная логика, которую нельзя терять при обновлении ядра.
В ядре (inc/, classes/) стоит менять код только тогда, когда вы действительно развиваете сам фреймворк, а не отдельный проект на нём.
Отвечает за преобразование URL в:
- модуль;
- контроллер;
- action;
- аргументы.
Поддерживает route cache и debug-диагностику.
Общий базовый слой контроллеров:
- работа с
View; - layout rendering;
- доступ и redirect-сценарии;
- интеграция с пользователем, языком и общими параметрами страницы.
Модели инкапсулируют:
- SQL;
- валидацию данных;
- lifecycle-операции;
- транзакционную логику;
OperationResultдля мутаций.
Отвечают за:
- передачу данных в шаблон;
- рендер view;
- сборку layout;
- частичный кэш блоков;
- безопасный вывод данных.
Система хуков позволяет расширять поведение без правок core hooks:
Hook::add(...)Hook::run(...)Hook::filter(...)Hook::until(...)
Проектные callback-ы регистрируются через custom/hooks.php.
В платформе есть отдельный auth-слой с:
- пользователями;
- ролями;
- credential/session/challenge-моделью;
- проверкой доступа на уровне контроллеров и административных маршрутов.
Общий cache-слой поддерживает:
- file backend;
- Redis backend;
- route cache;
- HTML cache;
- block cache;
- namespace/version изоляцию.
Система логирования ориентирована на production-эксплуатацию:
- уровни логов;
- каналы;
request_id;- контекст запроса;
- ротация;
- удобный просмотр логов в админке.
Для ручного запуска служебных команд и диагностики используется единый entrypoint:
php inc/cli.php helpЧерез него запускаются:
- scheduler-команды;
- diagnostics-команды;
- operational health-check сценарии.
Каталог app/cron/ оставлен только для реальных scheduler-wrapper файлов, которые можно ставить в cron напрямую.
В production используется один минутный entrypoint:
php app/cron/run.phpОн не содержит бизнес-логики сам по себе. Вместо этого:
- расписание задач хранится в БД;
- handler-код живёт в проекте;
- агентами управляет админка
/admin/cron_agents; - scheduler сам учитывает блокировки, лимиты нагрузки и stale recovery.
Обязательные системные агенты для работы платформы создаются автоматически при развёртывании и первом bootstrap.
- Поток запроса легко читать в коде.
- Проектный слой отделён от ядра.
- Админка, lifecycle, поиск и фильтры уже встроены.
- Большая часть системы не требует “догадок” о том, где лежит логика.
- Есть понятные точки расширения:
app/для модулей и маршрутовcustom/для project-specific поведенияhooksдля точечного расширения
Подробная документация лежит в custom/docs/ и доступна как в репозитории, так и через docs-модуль.
- README / карта документации
- Быстрый старт
- Архитектура
- Маршрутизация
- Модели
- Контентная модель
- Views и Layouts
- Hooks и custom-слой
- Импорт типов, свойств и наборов
- Auth и доступ
- Cron-агенты и scheduler
- Кэширование
- Отладка
- API Reference
Если вы только знакомитесь с проектом, лучше идти именно в этом порядке.
- Не кладите проектную логику в
inc/hooks.phpиinc/startup.php. - Используйте
custom/как upgrade-safe слой. - Не смешивайте SQL, HTML и сценарную логику в одном месте.
- Для мутаций моделей придерживайтесь
OperationResult. - Используйте hooks для расширения, а не как замену нормальной архитектуре.
- Не считайте кэш источником истины.
- Держите
logs/,cache/иuploads/в корректных правах ещё до первых тестов.
EE_FrameWork развивается как реальная production-oriented платформа, а не как демонстрационный skeleton.
В репозитории уже есть:
- административный модуль;
- пользовательская документация;
- кэширование;
- логирование;
- auth и доступ;
- docs-модуль;
- import и lifecycle-контур;
- поисковая и фильтрационная подсистемы;
- custom-layer для upgrade-safe развития проекта.
Это хорошая база для дальнейшего развития публичного фронта, project-specific бизнес-логики и интеграций.
См. LICENSE.md.