Skip to content

frontcamp/coffium

Repository files navigation

Coffium – The Only Real PHP Framework

Coffium 0.5.alpha (в разработке)

Процедурный минималистичный файлово-ориентированный PHP-фреймворк для проектов с повышенными требованиями к производительности и безопасности.

Идеология Coffium

  • процедурный фреймворк без ООП-надстроек и оверхедов;
  • минимальное ядро, функциональные компоненты;
  • максимальная декомпозиция системы;
  • файлово-ориентированная маршрутизация;
  • максимальная производительность (/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

Для кого Coffium

Требуются хорошие знания 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).

Компоненты связываются между собой с помощью механизма зависимостей. Запуск компонентов происходит поэтапно:

  1. корневая инициализация (автозапуск компонентов-сервисов);
  2. маршрутизация в соответствии с URL-запросом;
  3. регрессия запроса при отсутствии конечного обработчика;
  4. обработка исключительных ситуаций в обработчике по умолчанию;
  5. выполнение финализаторов.

Таким образом, все элементы системы подключаются, подобно оркестру, в строго определенные моменты и расположены именно там, где этого ожидает разработчик. Например, если нужно изменить иконку у поля в форме логина, зайдите в компонент управления пользователями:

/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

Всем вкусного и ароматного кофе!

About

Minimal PHP Framework for rapid web development.

Topics

Resources

License

Security policy

Stars

Watchers

Forks

Contributors

Languages