Skip to content

Commit

Permalink
framework 1.1.0
Browse files Browse the repository at this point in the history
  • Loading branch information
Sergey Surkov committed Aug 25, 2021
0 parents commit 6224af3
Show file tree
Hide file tree
Showing 172 changed files with 15,982 additions and 0 deletions.
28 changes: 28 additions & 0 deletions LICENSE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# 3-Clause BSD License
Copyright © 2021 DissonancePHP.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in
the documentation and/or other materials provided with the
distribution.
* Neither the name of DissonancePHP nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
287 changes: 287 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,287 @@
# Dissonance Web (MVP, BETA-PRE-ZERO EDITION)
### Описание
**Фреймфорк создан с целью упростить интеграцию независимых небольших приложений в другие CMS и фреймворки, а также для расширения функциональности пакетов для композера.**


Идеология - отдельная экосистема небольших приложений для совместной работы вместе с другими фреймворками и удобной интеграции дополнительного функционала.

Есть много пакетов и отдельно написанных приложений,
которые поставляют полезный функционал, имеют свою бизнес логику и иногда даже имеют свой отдельный веб интерфейс.

В ларавель пакеты, в симфони бандлы, в различных CMS в виде плагинов и дополнений, и у всех своя реализация роутинга, событий, кеширования и т.д. Взять пакет, написанный для ларавель, и интегрировать его в другой фреймворк или CMS, в большинсте случаев будет проблематично, а в некоторых нереально из-за определенных зависимостей от фреймворка.


Самим разработчикам приложений приходится писать адаптацию под каждый фреймворк и CMS, что создает много проблем и не покрывает все известные экосистемы.

Также такие приложения приходится интегрировать в систему:
1. Настраивать ACL
2. Интегрировать неоходимые скрипты админку и на фронт
3. Создавать обработчики запросов и структуру в бд
4. Делать связку с файловой системой
5. Делать сохранение настроек и конфигурации

Примеров таких приложений много:
- одностраничные приложения
- текстовые редакторы и их плагины с несколькими уровнями зависимости (плагин для плагина)
- обработчики картинок
- различные оптимизаторы и компрессоры
- приложения для работы с файлами и базами данных
- чат боты
- административные, аналитические интрументы
- лендинги и другие микро приложения
- .....


Фреймворк оптимизирован для работы с большим количеством приложений, а также для работы в качетсве подсистемы для основного фреймворка.

Каждое приложение является композер пакетом,
с дополнительным описанием прямо в файле composer.json.

## Характеристики
- PSR дружественный
- Мало зависимостей (только PSR интерфейсы и PSR-7 имплементация)
- Небольшой вес (370 кб дев версия и формтированием и коментариями, продакт 170 кб)
- Оптимизирован для работы в симбиозе с другими фреймворками
- Многоуровневая система контейнеров (Ядро<-Приложение<-Плагин), с доступом к контейнеру родителю.
- Виртуальная файловая система (прокидывание статики прямо из папки пакета)
- Всем знакомое апи контейнера
- Шаблонизатор Blade(урезанный и кривой пока), + возможность прокинуть свой шаблонизатор.
- Никаких сборщиков статики (Каждый пакет должен иметь уже скомпилировынные файлы).
- Отложенный роутинг (грузятся только роуты запрошенного приложения, определяется по префиксу-поселению).
- Возможность расширять конревые сервисы (Бутстраперы и сервисы).
- У каждого приложения свой сервис контейнер и сервисы.
- Поддержка кеша (PSR-16 Simple Cache) + Кешируемый cервис контейнер.
- Для тех, кто будет тестировать: отличное приключение (почти реверс), абсолютно без документации и все одном файле!!!)))

## Установка
```
composer require dissonance/full
```
Сразу ставьте и пакет для разработки
```
composer require dissonance/develop
```

## Запуск

Фреймворк подключается из композера прямо в ваш index.php.

Если вы используете уже фреймворк, то необходимо включить режим симбиоза в конфиге
```php
$config['symbiosis'] = true;
```
##### Инициализация
```php
$basePath = dirname(__DIR__);// корневая папка проекта
include_once $basePath . '/vendor/autoload.php';

include $basePath.'/vendor/dissonance/full/src/dissonance.php';

// Дальше может идти код инициализации и отработки другого фреймворка...
//....

```
## Расширенный способ
```php



$basePath = dirname(__DIR__);// корневая папка проекта
include_once $basePath. '/vendor/autoload.php';

$config = [
'debug' => true,
'symbiosis' => true, // Режим симбиоза, если включен и фреймворк не найдет обработчик,
// то он ничего не вернет и основной фреймворк смодет сам обработать запрос
'default_host' => 'localhost',// для консоли , но ее пока нет
'uri_prefix' => 'dissonance', // Префикс в котором работет фреймворк, если пустой то работае от корня
'base_path' => $basePath, // базовая папка проекта
'assets_prefix' => '/assets',
'storage_path' => $basePath . '/storage', // Если убрать то кеш отключится
'packages_paths' => [
$basePath . '/vendor', // Папка для приложений
],
'bootstrappers' => [
\Dissonance\Develop\Bootstrap\DebugBootstrap::class,/// debug only
\Dissonance\Bootstrap\EventBootstrap::class,
\Dissonance\SimpleCacheFilesystem\Bootstrap::class,
\Dissonance\PackagesLoaderFilesystem\Bootstrap::class,
\Dissonance\Packages\PackagesBootstrap::class,
\Dissonance\Packages\ResourcesBootstrap::class,
\Dissonance\Apps\Bootstrap::class,
\Dissonance\Http\Bootstrap::class,
\Dissonance\HttpKernel\Bootstrap::class,
\Dissonance\CacheRouting\Bootstrap::class,
\Dissonance\ViewBlade\Bootstrap::class,
],
'providers' => [
\Dissonance\Http\Cookie\CookiesProvider::class,
\Dissonance\SettlementsRouting\Provider::class,
\Dissonance\Session\NativeProvider::class,
],
'providers_exclude' => [
\Dissonance\Routing\Provider::class,
]
];

// Базовая постройка контейнера
$core = new \Dissonance\Core($config);
// Или через билдер с кешем
$cache = new Dissonance\SimpleCacheFilesystem\SimpleCache($basePath . '/storage/cache/core');
$core = (new \Dissonance\CachedContainer\ContainerBuilder($cache))
->buildCore($config);

// Запуск
$core->run();
// Дальше может идти код инициализации и отработки другого фреймворка...

```
##### Схема описания расширения и приложения для фреймворка
Берем стандартный пакет композера и добавляем:
```json
{
"name": "vendor/package",
"require": {
// ...
},
"autoload": {
///

},
// Добавляем описание пакета для фреймворка
"extra": {
"dissonance": {
"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": "\\\\Dissonance\\\\Develop\\\\Controllers", // Базовый неймспейс для контроллеров, не обязательно
"version": "1.0.0", // Версия, не обязательно, плагины могут проверять и подстаиваться под изменения
"providers": [ // Провайдеры приложения, не обязательно
"MyVendor\\\\MySuperPackage\\\\Providers\\\\AppProvider"
],
// Не обязательно! Наследник от \\Dissonance\\App\\Application
"app_class": "MyVendor\\\\MySuperPackage\\\\MyAppContainer"
},

// Расширения ядра фреймворка, не обязательно
"bootstrappers":[
"MyVendor\\\\MySuperPackage\\\\CoreBootstrap" // Загрузчики
],
"providers" : [
"MyVendor\\\\MySuperPackage\\\\MyDbProvider" // Провайдеры
],
"providers_exclude" : [
// Исключение провайдеров из загрузки
// Например при двух пакетах одной библиотеки позволяет исключить не нужную
]
}
}
}

```

#### Пример пакета только со статикой
Всего пару строк:
```json
{
"name": "vendor/package",
"require": {
// ...
},
"autoload": {
// ...
},
"extra": {
"dissonance": {
"id": "my_super_theme_2",
// Можно указать что то одно или все вместе
"public_path": "assets", // Папка со статикой, относительно корня пакета
"resources_path": "my_resources", // Папка c шаблонами и другими файлами, не доступны через http
// можно прокинуть в веб при необходимости через специальный объект доступа к ресурсам
}
}
}

```


#### Пример пакета приложения
При конфигурации приложения можно не указывать пути для статики и ресурсов, тогда будут определены пути по умолчанию:

- public_path = assets
- resources_path = resources

Шаблоны всегда дожны лежать в директории /view/ в папке ресурсов!
```json
{
"name": "vendor/package",
"require": {
// ...
},
"autoload": {
// ...
},
"extra": {
"dissonance": {
"app": {
"id": "my_package_id", // Id приложения
"routing": "\\\\MyVendor\\\\MySuperPackage\\\\Routing",
"controllers_namespace": "\\\\Dissonance\\\\Develop\\\\Controllers"
},
}
}
}

```

## Примерная структура пакета
Четкой обязательной структуры нет, можно использовать любую.
```text
vendor/
-/my_vendor
-/my_package_name
-/assets - Статика
-/js
-/css
-/...
-/resources - Ресурсы
-/views
-/...
-/src - Ваш пакет
-/Http
-/Cоntrollers
-/...
-/ ...
-/Routing.php
-/composer.json
```

При необходимости можно поселить все классы для приложения фреймворка в подпапку src/Dissonance. Так не будет путаницы с функционалом вашего пакета.

```text
vendor/
-/my_vendor
-/my_package_name
-/dissonance
-/assets - Статика
-/js
-/css
-/...
-/resources - Ресурсы
-/views
-/...
-/src - Ваш пакет
-/Dissonance
-/Http
-/Cоntrollers
-/...
-/Routing.php
-/Ваши папки и файлы ...
-/composer.json
```

64 changes: 64 additions & 0 deletions composer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
{
"name": "dissonance/full",
"description": "Полная сборка пакетов фреймворка Dissonance.",
"license": "BSD-3-Clause",
"version": "1.1.0",
"authors": [{
"name": "Surkov Sergey",
"role": "creator"
}],
"keywords": [
"dissonance",
"composer apps framework",
"dissonance web"
],
"require": {
"php": ">=8.0",
"psr/http-server-handler": "1.0.*",
"psr/http-server-middleware": "1.0.1",
"psr/http-factory": "1.0.1",
"psr/event-dispatcher": "1.0.*",
"psr/container": "^1.0",
"psr/simple-cache": "1.*",
"nyholm/psr7": ">=1.3.2",
"dissonance/ui_http_kernel": "1.*",
"ext-json": "*"
},
"autoload": {
"psr-4":{
"Dissonance\\": "src/"
},
"files": [
"src/core_helpers.php",
"src/http_kernel_helpers.php"
]
},
"suggest": {
"dissonance/full-single": "Полная сборка в одном файле",
"dissonance/develop": " Dev app"
},
"replace": {
"dissonance/apps": "1.0.*",
"dissonance/cached-container": "1.0.*",
"dissonance/container": "1.0.*",
"dissonance/container-contracts": "1.0.*",
"dissonance/container-traits": "1.0.*",
"dissonance/core": "1.0.*",
"dissonance/event": "1.0.*",
"dissonance/http": "1.0.*",
"dissonance/http-kernel": "1.0.*",
"dissonance/http-middlewares": "1.0.*",
"dissonance/http-response-mutable": "1.0.*",
"dissonance/mimetypes-mini": "1.0.*",
"dissonance/packages": "1.0.*",
"dissonance/packages-contracts": "1.0.*",
"dissonance/routing": "1.0.*",
"dissonance/routing-cache": "1.0.*",
"dissonance/routing-settlements": "1.0.*",
"dissonance/simple-cache-filesystem": "1.0.*",
"dissonance/http-cookie": "1.0.*",
"dissonance/contracts": "1.0.*",
"dissonance/session-native": "1.0.*",
"dissonance/view-blade": "1.0.*"
}
}
Loading

0 comments on commit 6224af3

Please sign in to comment.