Введение
Модули - это дополнения к основному движку, которые позволяют расширять его функционал. Каждый модуль по своей сути уникален, и имеет свои требования, но во Flute есть единая структура, которой лучше придерживаться каждому модулю. Некоторые примеры созданных модулей.
Структура модуля
Все плагины находятся в папке app/Modules/
. Пример структуры плагина:
Monitoring - Это лишь пример ключа модуля. У каждого модуля структура может немножко отличаться, как и ключ
Modules
├── Monitoring
│ ├── i18n
│ │ ├── en
│ │ │ └── monitoring.php
│ │ └── ru
│ │ └── monitoring.php
│ ├── Resources
│ │ ├── assets
│ │ │ ├── js
│ │ │ │ └── monitoring.js
│ │ │ └── scss
│ │ │ └── monitoring.scss
│ │ └── Views
│ │ └── servers.blade.php
│ ├── ServiceProviders
│ │ ├── Extensions
│ │ │ └── WidgetExtension.php
│ │ └── MonitoringServiceProvider.php
│ ├── Services
│ │ └── ServersMonitorService.php
│ ├── Widgets
│ │ └── ServersWidget.php
│ ├── Installer.php
│ └── module.json
Файл установщика
Файл Installer.php является необязательным, но его наличие в модуля означает, что для установки или деинсталяции потребуются некоторые действия (выполнение миграций, удаление виджетов из системы и т.п.)
Каждый Installer
должен обязательно расширяться от класса AbstractModuleInstaller
.
Каждый метод install
, uninstall
должны возвращать bool
и эти методы обязательно должны быть в классе.
Пример реализации готового установщика:
<?php
namespace Flute\Modules\Monitoring;
use Flute\Core\Support\AbstractModuleInstaller;
use Flute\Modules\Monitoring\Widgets\ServersWidget;
class Installer extends AbstractModuleInstaller
{
public function install(\Flute\Core\Modules\ModuleInformation &$module) : bool
{
// Тут например, можно выполнить миграции
$this->importMigrations();
return true;
}
public function uninstall(\Flute\Core\Modules\ModuleInformation &$module) : bool
{
// Тут, например можно убрать из регистрации виджет
widgets()->unregister(ServersWidget::class);
return true;
}
}
Файл конфигурации
У каждого модуля обязан быть файл конфигурации. Как правило - это JSON с произвольными параметрами, применяемые к конкретному модулю.
Пример конфигурации:
{
"name": "Monitoring module",
"version": "1.0.0",
"description": "Provides a game info status of players on each added server",
"authors": ["Flames"],
"providers": [
"Flute\\Modules\\Monitoring\\ServiceProviders\\MonitoringServiceProvider"
],
"dependencies": {
"php": "7.4",
"flute": "0.3.1-dev",
"extensions": ["xml", "zip"],
"modules": {
"Shop": "0.2.1",
},
"theme": {
"standard": "1.0.0"
}
}
}
Объяснение параметров файла конфигурации
Детальное объяснение каждого параметра в примере файла конфигурации JSON для модуля:
-
"name"
: Это имя модуля. В данном случае,"Monitoring module"
указывает на то, что модуль предназначен для мониторинга, возможно, серверов или игровых процессов. -
"version"
: Здесь указывается версия модуля."1.0.0"
следует семантике версионирования SemVer, где изменения в номерах версии означают различные уровни изменений в модуле. -
"description"
: Краткое описание модуля. В этом случае,"Provides a game info status of players on each added server"
говорит о том, что модуль предоставляет информацию о статусе игроков на добавленных серверах. -
"authors"
: Список авторов или разработчиков модуля. Это может быть один человек или команда. Здесь указано["Flames"]
. -
"providers"
: Список классов поставщиков услуг, которые использует модуль. Эти классы обычно предоставляют конкретные функциональные возможности или сервисы в контексте модуля. Пример:["Flute\\Modules\\Monitoring\\ServiceProviders\\MonitoringServiceProvider"]
. -
"dependencies"
: Описывает зависимости модуля. Это важная часть, поскольку указывает на требуемое программное обеспечение или модули для корректной работы текущего модуля:"php"
: Минимальная требуемая версия PHP."flute"
: Минимальная версия Flute для установки модуля."extensions"
: Список требуемых расширений PHP, например,["xml", "zip"]
."modules"
: Список других модулей, от которых зависит текущий модуль, с указанием их версий. Например, модуль"Shop"
версии"0.2.1"
."theme"
: Указывает на зависимость от определённой темы оформления, если таковая имеется, с указанием её версии.