README.RU.md РУССКОЕ ОПИСАНИЕ
composer require symbiotic/full
For faster work on hosting without PHP optimization, build in one file symbiotic/full-single
The framework was created to simplify the integration of independent small applications into other CMS and frameworks, as well as to expand the functionality of the composer packages.
Ideology is a separate ecosystem of small applications for collaboration with other frameworks and convenient integration of additional functionality.
There are many packages and separately written applications that deliver useful functionality, have their own business logic and sometimes even have their own separate web interface.
In Laravel packages, in Symfony Bundles, in various CMS in the form of plugins and add-ons, all have their own implementation of routing, events, caching, etc. A package written for Laravel to integrate another framework or CMS will be problematic in most cases, and in some cases impossible due to certain dependencies on the framework.
Application developers themselves have to write adaptations for each framework and CMS, which creates a lot of problems and does not cover all ecosystems.
Also, such applications have to do various integrations into the system:
Such applications include:
The framework is optimized to work with a large amount of applications, as well as to work as a subsystem for the main framework.
Each application is a composer package, with an additional description directly in the composer.json file.
// If you are already using the framework, then you need to enable the symbiosis mode in the config
// In this mode of operation, the framework will respond only to requests related to it and will not block work for "other" requests.
$config['symbiosis'] = true;The framework is attached from the composer directly to your index.php.
$basePath = dirname(__DIR__);// root folder of the project
include_once $basePath . '/vendor/autoload.php';
include $basePath.'/vendor/symbiotic/full/src/symbiotic.php';
// Then the initialization code and the work of another framework can go on when the symbiosis mode is enabled...
//.... $laravel->handle();
$basePath = dirname(__DIR__);// root folder of the project
include_once $basePath. '/vendor/autoload.php';
$config = include $basePath.'/vendor/symbiotic/full/src/config.sample.php';
//.. Redefining the configuration array
// Basic construction of the Core container
$core = new SymbioticCoreCore($config);
/**
* When installing the symbiotic/full package, a cached container is available
* Initialization in this case occurs through the Builder:
*/
$cache = new SymbioticCacheFilesystemCache($config['storage_path'] . '/cache/core');
$core = (new SymbioticCoreContainerBuilder($cache))
->buildCore($config);
// Starting request processing
$core->run();
// Then the initialization code and the work of another framework can go on when the symbiosis mode is enabled...
// $laravel->handle();The minimum scheme of the application description in the composer.json file:
{
"name": "vendor/package",
"require": {
// ...
},
"autoload": {
// ...
},
"extra": {
"symbiotic": {
"app": {
// Application ID
"id": "my_package_id",
// Routing provider
"routing": "\MyVendor\MySuperPackage\Routing",
// Basic namespace for application controllers
"controllers_namespace": "\MyVendor\MySuperPackage\Http\Controllers"
}
}
}
}
{
"name": "vendor/package",
"require": {
// ...
},
"autoload": {
// ...
},
// Adding a description of the package for the symbiotic
"extra": {
"symbiotic": {
// Package ID
"id": "my_super_package",
// Application description, the package may not have an application section
"app": {
// Application ID, specified without the prefix of the parent application
"id": "image_optimizer",
// ID of the parent application (optional)
"parent_app": "media",
// Application name, used in the application list and menu
"name": "Media images optimizer",
// Routing class (optional)
"routing": "\MyVendor\MySuperPackage\Routing",
// Basic namespace for controllers (optional)
"controllers_namespace": "\Symbiotic\Develop\Controllers",
// Application providers (optional)
"providers": [
"MyVendor\MySuperPackage\Providers\AppProvider"
],
// Application container class (optional)
// Heir from \Symbiotic\App\Application
"app_class": "MyVendor\MySuperPackage\MyAppContainer"
},
// Folder with static relative to the package root (will be accessible via the web) (optional)
"public_path": "assets",
// Folder with templates and other resources (not accessible via the Web) (optional)
"resources_path": "my_resources",
// Framework Core Extensions
// Bootstrappers (optional)
"bootstrappers": [
"MyVendor\MySuperPackage\CoreBootstrap"
],
// Providers (optional)
"providers": [
"MyVendor\MySuperPackage\MyDbProvider"
],
// Exclusion of kernel providers (optional)
"providers_exclude": [
// Exclusion of providers from downloading
// For example, with two packages of the same library, it allows you to exclude unnecessary
],
// Event subscribers (optional)
"events": {
"handlers": {
"Symbiotic\Form\FormBuilder": "MyVendor\MyApp\Events\FilesystemFieldHandler",
"Symbiotic\Settings\FieldTypesRepository": "MyVendor\MyApp\Events\FieldsHandler",
"Symbiotic\UIBackend\Events\MainSidebar": "MyVendor\MyApp\Events\Menu"
}
},
//Package settings fields (optional)
"settings_fields": [
{
"title": "Fields group 1",
"name": "group_1",
"collapsed": 0,
"type": "group",
"fields": [
{
"label": "Field 1",
"name": "filed_name_1",
"type": "text"
},
{
"label": "Select 1",
"name": "select_1",
"type": "select",
"variants": {
"value1" :"title1",
"value12" :"title2"
}
},
{
"label": "Boolean checkbox",
"name": "debug",
"description": "Debug mode",
"type": "boolean"
}
]
}
],
// Default settings (optional)
"settings": {
"filed_name_1": "demo_value",
"select_1": "value12",
"debug": "0"
},
// Console commands (optional)
"commands": {
"worker": "MyVendor\MyApp\Commands\Worker",
"stop": "MyVendor\MyApp\Commands\Stop"
}
}
}
}
When configuring the application, you can not specify paths for statics and resources, then default paths will be defined.:
Templates should always be in the /view/ directory in the resources folder!
All packages for the framework can be divided into several logical categories:
Any package can combine all of the above.
There is no clear mandatory structure, you can use any one.
If you are making an application based on the composer package (library), to avoid confusion,
it is recommended to put all the code for the application in the src/Symbiotic folder.
vendor/
-/my_vendor
-/my_package_name
-/assets - Public files
-/js
-/css
-/...
-/resources - Resources
-/views - View templates
-/...
-/src - php code
-/Http
-/Cоntrollers
-/...
-/Services
...
-/Routing.php
-/composer.json