symbiotic/full-single

单文件完整共生框架。

1.2.13 2021-09-30 14:36 UTC

This package is auto-updated.

Last update: 2024-09-23 05:58:36 UTC


README

描述

框架旨在简化独立小型应用程序与其他CMS和框架的集成,以及扩展包在组合器中的功能。

理念是创建一个独立的生态系统,用于与其他框架协同工作并方便集成额外功能。

有许多包和独立编写的小程序,它们提供有用的功能,有自己的业务逻辑,有时甚至有自己的独立Web界面。

在Laravel包、Symfony束、各种CMS中以插件和扩展的形式,以及所有都有自己的路由、事件、缓存等实现。将专为Laravel编写的包集成到另一个框架或CMS,在大多数情况下将很困难,在某些情况下由于对框架的特定依赖而变得不现实。

应用程序的开发者不得不为每个框架和CMS编写适配,这造成了很多问题,并且无法涵盖所有已知的生态系统。

还需要将这些应用程序集成到系统中

  1. 配置ACL
  2. 集成必要的后台和前端脚本
  3. 创建数据库请求处理程序和结构
  4. 与文件系统进行连接
  5. 保存设置和配置

这样的应用程序有很多例子

  • 单页应用程序
  • 文本编辑器和它们的插件,具有多个依赖级别(插件内的插件)
  • 图片处理器
  • 各种优化器和压缩器
  • 文件和数据库操作应用程序
  • 聊天机器人
  • 管理、分析工具
  • 着陆页和其他微应用程序
  • .....

框架针对处理大量应用程序进行了优化,也适用于作为主框架的子系统。

每个应用程序都是一个组合器包,具有直接在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