symbiotic/full-single
Composer 安装命令:
composer require symbiotic/full-single
包简介
Full Symbiotic framework in single file.
README 文档
README
Описание
Фреймфорк создан с целью упростить интеграцию независимых небольших приложений в другие CMS и фреймворки, а также для расширения функциональности пакетов для композера.
Идеология - отдельная экосистема небольших приложений для совместной работы вместе с другими фреймворками и удобной интеграции дополнительного функционала.
Есть много пакетов и отдельно написанных приложений, которые поставляют полезный функционал, имеют свою бизнес логику и иногда даже имеют свой отдельный веб интерфейс.
В ларавель пакеты, в симфони бандлы, в различных CMS в виде плагинов и дополнений, и у всех своя реализация роутинга, событий, кеширования и т.д. Взять пакет, написанный для ларавель, и интегрировать его в другой фреймворк или CMS, в большинсте случаев будет проблематично, а в некоторых нереально из-за определенных зависимостей от фреймворка.
Самим разработчикам приложений приходится писать адаптацию под каждый фреймворк и CMS, что создает много проблем и не покрывает все известные экосистемы.
Также такие приложения приходится интегрировать в систему:
- Настраивать ACL
- Интегрировать неоходимые скрипты админку и на фронт
- Создавать обработчики запросов и структуру в бд
- Делать связку с файловой системой
- Делать сохранение настроек и конфигурации
Примеров таких приложений много:
- одностраничные приложения
- текстовые редакторы и их плагины с несколькими уровнями зависимости (плагин для плагина)
- обработчики картинок
- различные оптимизаторы и компрессоры
- приложения для работы с файлами и базами данных
- чат боты
- административные, аналитические интрументы
- лендинги и другие микро приложения
- .....
Фреймворк оптимизирован для работы с большим количеством приложений, а также для работы в качетсве подсистемы для основного фреймворка.
Каждое приложение является композер пакетом, с дополнительным описанием прямо в файле composer.json.
Характеристики
- PSR дружественный
- Мало зависимостей (только PSR интерфейсы и PSR-7 имплементация)
- Небольшой вес (370 кб дев версия и формтированием и коментариями, продакт 170 кб)
- Оптимизирован для работы в симбиозе с другими фреймворками
- Многоуровневая система контейнеров (Ядро<-Приложение<-Плагин), с доступом к контейнеру родителю.
- Виртуальная файловая система (прокидывание статики прямо из папки пакета)
- Всем знакомое апи контейнера
- Шаблонизатор Blade(урезанный и кривой пока), + возможность прокинуть свой шаблонизатор.
- Никаких сборщиков статики (Каждый пакет должен иметь уже скомпилировынные файлы).
- Отложенный роутинг (грузятся только роуты запрошенного приложения, определяется по префиксу-поселению).
- Возможность расширять конревые сервисы (Бутстраперы и сервисы).
- У каждого приложения свой сервис контейнер и сервисы.
- Поддержка кеша (PSR-16 Simple Cache) + Кешируемый cервис контейнер.
- Для тех, кто будет тестировать: отличное приключение (почти реверс), абсолютно без документации и все одном файле!!!)))
Установка
composer require symbiotic/full-single
Запуск
Фреймворк подключается из композера прямо в ваш index.php.
Если вы используете уже фреймворк, то необходимо включить режим симбиоза в конфиге
$config['symbiosis'] = true;
Инициализация
$basePath = dirname(__DIR__);// корневая папка проекта include_once $basePath. '/vendor/autoload.php'; $config = [ 'debug' => false, 'symbiosis' => true, // Режим симбиоза, если включен и фреймворк не найдет обработчик, // то он ничего не вернет и основной фреймворк смодет сам обработать запрос 'default_host' => 'localhost',// для консоли , но ее пока нет 'uri_prefix' => 'symbiotic', // Префикс в котором работет фреймворк, если пустой то работае от корня 'base_path' => $basePath, // базовая папка проекта 'assets_prefix' => '/assets', 'storage_path' => $basePath . '/storage', // Если убрать то кеш отключится 'packages_paths' => [ $basePath . '/vendor', // Папка для приложений ], 'bootstrappers' => [ //\Symbiotic\Develop\Bootstrap\DebugBootstrap::class,/// debug with develop app only \Symbiotic\Core\Bootstrap\EventBootstrap::class, \Symbiotic\SimpleCacheFilesystem\Bootstrap::class, \Symbiotic\Packages\PackagesLoaderFilesystemBootstrap::class, \Symbiotic\Packages\PackagesBootstrap::class, \Symbiotic\Packages\ResourcesBootstrap::class, \Symbiotic\Apps\Bootstrap::class, \Symbiotic\Http\Bootstrap::class, \Symbiotic\Http\Kernel\Bootstrap::class, \Symbiotic\View\Blade\Bootstrap::class, \Symbiotic\Routing\SettlementsPreloadMiddlewareBootstrap::class, ], 'providers' => [ \Symbiotic\Http\Cookie\CookiesProvider::class, \Symbiotic\Routing\SettlementsRoutingProvider::class, \Symbiotic\Session\NativeProvider::class, ], 'providers_exclude' => [ \Symbiotic\Routing\Provider::class, ] ]; // Базовая постройка контейнера $core = new \Symbiotic\Core\Core($config); // Или через билдер с кешем $cache = new Symbiotic\SimpleCacheFilesystem\SimpleCache($basePath . '/storage/cache/core'); $core = (new \Symbiotic\Core\ContainerBuilder($cache)) ->buildCore($config); // Запуск $core->run(); // Дальше может идти код инициализации и отработки другого фреймворка...
Схема описания расширения и приложения для фреймворка
Берем стандартный пакет композера и добавляем:
{
"name": "vendor/package",
"require": {
// ...
},
"autoload": {
///
},
// Добавляем описание пакета для фреймворка
"extra": {
"symbiotic": {
"id": "wso.my_package_id", // ID пакета формируется на сайте фреймворка, но можно локально любой ставить
// Описание приложения, пакет может и не иметь секцию приложения, а быть лишь расширением
"app": {
"id": "my_package_id", // Id приложения, указывается без префикса родительского приложения
"parent_app": "wso", // ID родительсского приложения, если приложение плагин
"name": "WSO Users exporter", // Имя приложения, используется в списке приложений и меню
"routing": "\\\\MyVendor\\\\MySuperPackage\\\\Routing", // Класс роутинга, не обязательно
"controllers_namespace": "\\\\Symbiotic\\\\Develop\\\\Controllers", // Базовый неймспейс для контроллеров, не обязательно
"version": "1.0.0", // Версия, не обязательно, плагины могут проверять и подстаиваться под изменения
"providers": [ // Провайдеры приложения, не обязательно
"MyVendor\\\\MySuperPackage\\\\Providers\\\\AppProvider"
],
// Не обязательно! Наследник от \\Symbiotic\\App\\Application
"app_class": "MyVendor\\\\MySuperPackage\\\\MyAppContainer"
},
// Расширения ядра фреймворка, не обязательно
"bootstrappers":[
"MyVendor\\\\MySuperPackage\\\\CoreBootstrap" // Загрузчики
],
"providers" : [
"MyVendor\\\\MySuperPackage\\\\MyDbProvider" // Провайдеры
],
"providers_exclude" : [
// Исключение провайдеров из загрузки
// Например при двух пакетах одной библиотеки позволяет исключить не нужную
]
}
}
}
Пример пакета только со статикой
Всего пару строк:
{
"name": "vendor/package",
"require": {
// ...
},
"autoload": {
// ...
},
"extra": {
"symbiotic": {
"id": "my_super_theme_2",
// Можно указать что то одно или все вместе
"public_path": "assets", // Папка со статикой, относительно корня пакета
"resources_path": "my_resources", // Папка c шаблонами и другими файлами, не доступны через http
// можно прокинуть в веб при необходимости через специальный пакет доступа к ресурсам
}
}
}
Пример пакета приложения
При конфигурации приложения можно не указывать пути для статики и ресурсов, тогда будут определены пути по умолчанию:
- public_path = assets
- resources_path = resources
Шаблоны всегда дожны лежать в директории /view/ в папке ресурсов!
{
"name": "vendor/package",
"require": {
// ...
},
"autoload": {
// ...
},
"extra": {
"symbiotic": {
"app": {
"id": "my_package_id", // Id приложения
"routing": "\\\\MyVendor\\\\MySuperPackage\\\\Routing",
"controllers_namespace": "\\\\Symbiotic\\\\Develop\\\\Controllers"
},
}
}
}
Примерная структура пакета
Четкой обязательной структуры нет, можно использовать любую.
vendor/
-/my_vendor
-/my_package_name
-/assets - Статика
-/js
-/css
-/...
-/resources - Ресурсы
-/views
-/...
-/src - Ваш пакет
-/Http
-/Cоntrollers
-/...
-/ ...
-/Routing.php
-/composer.json
При необходимости можно поселить все классы для приложения фреймворка в подпапку src/Symbiotic. Так не будет путаницы с функционалом вашего пакета.
vendor/
-/my_vendor
-/my_package_name
-/symbiotic
-/assets - Статика
-/js
-/css
-/...
-/resources - Ресурсы
-/views
-/...
-/src - Ваш пакет
-/Symbiotic
-/Http
-/Cоntrollers
-/...
-/Routing.php
-/Ваши папки и файлы ...
-/composer.json
symbiotic/full-single 适用场景与选型建议
symbiotic/full-single 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 36 次下载、GitHub Stars 达 2, 最近一次更新时间为 2021 年 08 月 28 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「single file framework」 「symbiotic」 「symbiotic web」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 symbiotic/full-single 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 symbiotic/full-single 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 symbiotic/full-single 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
PHP Framework HLEB2 is the foundation of the web application. Provides ease of development and application performance.
The file manager intended for using Laravel with CKEditor / TinyMCE / Colorbox
Light SAML 2.0 PHP library
Laravel Media Popup to upload/view the files
PMVC Plugin for File information
Mapper for accessing resources in KWCMS
统计信息
- 总下载量: 36
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 2
- 点击次数: 0
- 依赖项目数: 0
- 推荐数: 1
其他信息
- 授权协议: BSD-3-Clause
- 更新时间: 2021-08-28