symbiotic / full-single
单文件完整共生框架。
1.2.13
2021-09-30 14:36 UTC
Requires
- php: >=7.2
- ext-json: *
- ext-mbstring: *
- nyholm/psr7: >=1.3.2
- psr/container: ^1.0
- psr/event-dispatcher: 1.0.*
- psr/http-factory: 1.0.1
- psr/http-server-handler: 1.0.*
- psr/http-server-middleware: 1.0.1
- psr/simple-cache: 1.*
- symbiotic/ui_http_kernel: 1.*
Suggests
- symbiotic/develop: (dev-master) Dev app
Replaces
- symbiotic/apps: 1.*
- symbiotic/apps-contracts: 1.*
- symbiotic/autoloader: 1.*
- symbiotic/cached-container: 1.*
- symbiotic/container: 1.*
- symbiotic/container-contracts: 1.*
- symbiotic/container-factory-contract: 1.*
- symbiotic/container-traits: 1.*
- symbiotic/core: 1.*
- symbiotic/event: 1.*
- symbiotic/event-contracts: 1.*
- symbiotic/filesystem: 1.*
- symbiotic/http: 1.*
- symbiotic/http-cookie: 1.*
- symbiotic/http-kernel: 1.*
- symbiotic/http-middlewares: 1.*
- symbiotic/http-response-mutable: 1.*
- symbiotic/middleware-asset-file: 1.*
- symbiotic/middleware-request-prefix: 1.*
- symbiotic/mimetypes-mini: 1.*
- symbiotic/packages: 1.*
- symbiotic/packages-contracts: 1.*
- symbiotic/routing: 1.*
- symbiotic/routing-cache: 1.*
- symbiotic/routing-contracts: 1.*
- symbiotic/routing-settlements: 1.*
- symbiotic/session-contracts: 1.*
- symbiotic/session-native: 1.*
- symbiotic/simple-cache-filesystem: 1.*
- symbiotic/view-blade: 1.0.*
README
描述
框架旨在简化独立小型应用程序与其他CMS和框架的集成,以及扩展包在组合器中的功能。
理念是创建一个独立的生态系统,用于与其他框架协同工作并方便集成额外功能。
有许多包和独立编写的小程序,它们提供有用的功能,有自己的业务逻辑,有时甚至有自己的独立Web界面。
在Laravel包、Symfony束、各种CMS中以插件和扩展的形式,以及所有都有自己的路由、事件、缓存等实现。将专为Laravel编写的包集成到另一个框架或CMS,在大多数情况下将很困难,在某些情况下由于对框架的特定依赖而变得不现实。
应用程序的开发者不得不为每个框架和CMS编写适配,这造成了很多问题,并且无法涵盖所有已知的生态系统。
还需要将这些应用程序集成到系统中
- 配置ACL
- 集成必要的后台和前端脚本
- 创建数据库请求处理程序和结构
- 与文件系统进行连接
- 保存设置和配置
这样的应用程序有很多例子
- 单页应用程序
- 文本编辑器和它们的插件,具有多个依赖级别(插件内的插件)
- 图片处理器
- 各种优化器和压缩器
- 文件和数据库操作应用程序
- 聊天机器人
- 管理、分析工具
- 着陆页和其他微应用程序
- .....
框架针对处理大量应用程序进行了优化,也适用于作为主框架的子系统。
每个应用程序都是一个组合器包,具有直接在composer.json文件中的附加描述。
特性
- PSR友好
- 依赖少(仅PSR接口和PSR-7实现)
- 体积小(开发版370KB,包含格式化和注释的产品170KB)
- 针对与其他框架协同工作进行了优化
- 多层容器系统(内核<-应用程序<-插件),具有对父容器器的访问权限。
- 虚拟文件系统(直接从包文件夹中推送静态文件)
- 熟悉的容器API
- 模板引擎Blade(目前为精简版和有缺陷的),+ 可以推送自己的模板引擎。
- 没有静态文件收集器(每个包都应该有已经编译好的文件)。
- 延迟路由(仅加载请求应用程序的路由,根据前缀-子集确定)
- 可以扩展服务(启动器和服务)。
- 每个应用程序都有自己的服务容器和服务。
- 支持缓存(PSR-16 Simple Cache)+ 缓存的容器服务。
- 对于将要进行测试的人:这是一次绝佳的冒险(几乎是逆向工程),完全无文档,所有内容都在一个文件中!!!)))
安装
composer require symbiotic/full-single
启动
框架直接从composer连接到您的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(); // Дальше может идти код инициализации и отработки другого фреймворка...
扩展和应用程序描述方案
取标准composer包并添加
{ "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