EE_FrameWork — это PHP-фреймворк с MVC-ядром, встроенным административным контуром, гибкой контентной моделью и upgrade-safe слоем проектной кастомизации через custom/.
Проект ориентирован на разработку не шаблонных сайтов, а систем, где важны:
- управляемая архитектура без избыточной магии;
- быстрый старт для нового разработчика;
- встроенная админ-панель;
- гибкая модель сущностей, свойств, категорий и страниц;
- расширяемость без правок ядра;
- готовность к реальному production-использованию.
EE_FrameWork объединяет в одном репозитории:
- HTTP entrypoint и MVC-поток обработки запроса;
- Router, View, Cache, Hook, Auth и logging-слой;
- административный модуль для управления контентом и системой;
- проектный слой
custom/, который не должен теряться при обновлении ядра; - встроенные механизмы для поиска, фильтрации, lifecycle-синхронизации и работы со свойствами сущностей.
Это не микрофреймворк и не “голая CMS-тема”. Это основа для развития собственных проектов и сложных контентных систем.
Поток запроса остаётся прозрачным:
URL -> Router -> Controller -> Model -> View -> Layout -> Response
Это упрощает:
- отладку;
- онбординг новых разработчиков;
- развитие проекта без скрытых магических слоёв.
В проект уже входит admin-модуль, который покрывает:
- пользователей и роли;
- свойства, типы свойств и наборы;
- типы категорий, категории и страницы;
- импорт;
- логи;
- системные инструменты;
- health/operational сценарии.
EE_FrameWork поддерживает связку:
property types -> properties -> sets -> category types -> categories -> pages
Это позволяет строить сложные модели данных без жёсткой привязки к одной предметной области.
Проектный код не должен жить в ядре.
Для этого есть:
app/— маршруты, контроллеры, views, модульныеjs/css;custom/— project-specific hooks, bootstrap и сервисные классы, которые не нужно терять при обновлении платформы.
В ядре уже предусмотрены:
- кэширование;
- логирование;
- аутентификация и доступ;
- routing cache и HTML cache;
- lifecycle jobs;
- операции обслуживания системы;
- поисковая и фильтрационная подсистемы.
EE_FrameWork особенно хорошо подходит для:
- кастомных CMS и контентных платформ;
- каталогов и экспертных систем;
- информационных проектов со сложной структурой сущностей;
- административных back-office систем;
- платформ, которые должны эволюционировать в сторону маркетплейса, кабинетов, интеграций и тяжёлой бизнес-логики.
- PHP
8.0+ - MySQL/MariaDB
- PHP-расширения:
pdoи драйвер вашей СУБДmbstringjsonsessionfileinfoopensslcurl
- Redis опционален, если нужен Redis backend для кэша
Веб-процесс должен иметь доступ на запись в:
cache/logs/uploads/
Практически лучше использовать:
- общего владельца или общую группу для CLI и web;
- SGID/наследование группы для
logs/иcache/, чтобы фоновые задачи и веб не конфликтовали по правам.
Для первого smoke-теста достаточно:
php -S 127.0.0.1:8080 -t /var/www/htmlПосле этого можно проверить:
http://127.0.0.1:8080/index.phphttp://127.0.0.1:8080/index.php?show_debug=1
Важно:
- встроенный сервер удобен для первого запуска и bootstrap-проверки;
- для полноценных красивых URL нужен Apache/Nginx с rewrite-правилами.
На верхнем уровне запрос проходит так:
index.phpпроверяет окружение;- подключается
inc/bootstrap.php; - вызывается runtime bootstrap;
- поднимаются core-сервисы и
custom/; Routerопределяет контроллер и action;- управление передаётся контроллеру.
Быстрый способ добавить собственный маршрут — новый модуль в 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/ пользовательские файлы
/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;- контекст запроса;
- ротация;
- удобный просмотр логов в админке.
- Поток запроса легко читать в коде.
- Проектный слой отделён от ядра.
- Админка, lifecycle, поиск и фильтры уже встроены.
- Большая часть системы не требует “догадок” о том, где лежит логика.
- Есть понятные точки расширения:
app/для модулей и маршрутовcustom/для project-specific поведенияhooksдля точечного расширения
Подробная документация лежит в custom/docs/ и доступна как в репозитории, так и через docs-модуль.
- README / карта документации
- Быстрый старт
- Архитектура
- Маршрутизация
- Модели
- Контентная модель
- Views и Layouts
- Hooks и custom-слой
- Импорт типов, свойств и наборов
- Auth и доступ
- Кэширование
- Отладка
- 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.