Процедурный минималистичный файлово-ориентированный PHP-фреймворк для проектов с повышенными требованиями к производительности и безопасности.
- процедурный фреймворк без ООП-надстроек и оверхедов;
- минимальное ядро, функциональные компоненты;
- максимальная декомпозиция системы;
- файлово-ориентированная маршрутизация;
- максимальная производительность
(/docs/performance.md); - ультимативная безопасность
(/docs/security.md); - целевая аудитория: опытные разработчики, энтузиасты.
Уже доступно:
- компонентное ядро с документацией
(/docs/core.md) - поддержка автозапуска
(/coms/__init__.php) - обработчик по умолчанию
(/coms/<act|tpl>.default.php)
В разработке:
-
статика (служебные страницы: Error 404, etc.,
/coms/static) -
мультиязычность
(/coms/mlang) -
административный интерфейс
(/coms/admin) -
интерактивный отладчик
(/coms/debug) -
ZHTML CSS framework
(/coms/common/frontcamp/zhtml) -
jQuery JavaScript library
(/coms/common/openjsf/jquery) -
GeoIP база с демонстрацией
(/coms/common/maxmind/geoip2) -
драйвер БД MySQL
(/coms/db/*) -
менеджер таблиц БД (аналог phpMyAdmin,
/coms/dbtm) -
статистика
(/coms/stats) -
файловый кеш
(/coms/cache) -
блокировщик подозрительной активности
(/coms/blocker) -
управление пользователями
(/coms/user) -
компонент шаблонов разметки
(/coms/layout) -
статические страницы
(/coms/pages) -
комментирование
(/coms/comments/) -
почтовые рассылки
(/coms/mailer) -
личный блог
(/coms/blog) -
демо работы ядра
(/coms/demo/core) -
демо использования разметки
(/coms/demo/layout) -
демо компоновки страниц
(/coms/demo/handling)
- Сервер: Apache с поддержкой .htaccess и модуля mod_rewrite;
- PHP 8.0 и выше, с расширениями: <TODO: добавить список расширений>
- MySQL 5.5 и выше с правами на создание и изменение таблиц (требуется только для компонентов, работающих с БД)
Обратите внимание: текущая лицензия PNND разрешает использовать Coffium только для личных, учебных и внутренних проектов без коммерческого и production-использования. Для коммерческого использования требуется отдельное разрешение. Текст лицензии в файле: /LICENSE
Требуются хорошие знания PHP, HTML, CSS и JavaScript, а так же умение и желание работать с документацией.
Скачайте содержимое репозитория и скопируйте его на хостинг.
Система организована просто и интуитивно. Чтобы начать работу, сразу после копирования на хостинг откройте в браузере адрес:
https://<server>/admin
Введите логин/пароль (admin/admin) и вы попадете в административный интерфейс. В нем находятся: информация о состоянии и текущем составе системы, управление компонентами, инструменты разработки, диагностика ядра, настройки доступа и др.
Если ваш проект подразумевает работу с БД, доступ к БД можно настроить в файле конфигурации: cfg.server.php
Подробное описание конфигурации и принципов работы системы приведено в документации /docs/core.md.
Документация по компонентам находится в каталогах самих компонентов:
/coms/{component}/_docs/*.md
например:
/coms/db/_docs/readme.md
Документация по подключению и использованию сторонних библиотек находится в компоненте /coms/common, каталогах вендора и соответствующего продукта:
/coms/common/{vendor}/{product}/_docs/*.md
например:
/coms/common/openjsf/jquery/_docs/readme.md
ВАЖНО: После настройки настоятельно рекомендуется изучить /docs/security.md. В этом документе приведены чеклист и рекомендации по обеспечению безопасности системы.
/coms - компоненты
/data - динамические данные (служебный каталог)
/docs - документация по ядру, организации системы и безопасности
/libs - библиотеки ядра
/logs - логи
/temp - временные файлы
.gitignore - служебный Git файл
.htaccess - управление внешним доступом
CHANGELOG.md - история изменений
LICENSE - текст лицензии
README.md - этот документ
cfg.custom.php - конфигурация проекта
cfg.global.php - конфигурация ядра и системы, PHP, спец. доступ
cfg.server.php - конфигурация окружения (LOCAL/DEV/PROD, DB_*, etc)
index.php - точка входа в обработку запроса
Декомпозиция - один из ключевых принципов этого PHP-фреймворка. Структурными блоками системы являются компоненты и обработчики.
Компонент (component) - структурно самодостаточная часть бизнес-логики, которая может предоставлять API, виджеты и опционально обрабатывать входящие запросы с помощью соответствующих обработчиков.
Обработчик (handler) - структурный элемент компонента, расположенный в его внутренней структуре каталогов, состоящий из файла с бизнес-логикой или экшн-файла (act.{name}.php), шаблона вывода (tpl.{name}.php) и статики (в каталоге /web: стили, джаваскрипты и изображения).
Всё это подробно описано в документации ядра (/docs/core.md).
Компоненты связываются между собой с помощью механизма зависимостей. Запуск компонентов происходит поэтапно:
- корневая инициализация (автозапуск компонентов-сервисов);
- маршрутизация в соответствии с URL-запросом;
- регрессия запроса при отсутствии конечного обработчика;
- обработка исключительных ситуаций в обработчике по умолчанию;
- выполнение финализаторов.
Таким образом, все элементы системы подключаются, подобно оркестру, в строго определенные моменты и расположены именно там, где этого ожидает разработчик. Например, если нужно изменить иконку у поля в форме логина, зайдите в компонент управления пользователями:
/coms/user
Там находится виджет вывода формы логина:
/coms/user/widgets/login
В нём находится каталог со статикой и нужная картинка:
/coms/user/widgets/login/web/i/ico-user.webp
Таким образом, думая о любом элементе проекта, разработчик уже интуитивно понимает, где находится нужный обработчик и его статика. Такой подход позволяет не только содержать всю систему в идеальном порядке, но и бэкапить, копировать или переносить компоненты как цельные сущности.
Проблема:
Поскольку система использует процедурный подход, невозможно скрыть область видимости констант и функций API компонентов.
Решение:
В информационных файлах компонентов (__info__.php) задаётся уникальный префикс (prefix), который должен использоваться при именовании констант, глобальных переменных и функций компонента.
Проблема:
В данный момент версии указываются в информационных файлах компонентов (info.php), но совместимость не учитывается в механизме реализации зависимостей.
Решение:
Изменения между версиями фиксируются в changelog.txt соответствующих компонентов; решение об обновлении принимается на основании этих данных. Обновление в текущей версии системы выполняется вручную.
https://github.com/frontcamp/coffium/issues
Связь с автором: maxim.plaksin@gmail.com
Всем вкусного и ароматного кофе!
