Перейти к основному содержимому

Введение

Модули - это дополнения к основному движку, которые позволяют расширять его функционал. Каждый модуль по своей сути уникален, и имеет свои требования, но во 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 для модуля:

  1. "name": Это имя модуля. В данном случае, "Monitoring module" указывает на то, что модуль предназначен для мониторинга, возможно, серверов или игровых процессов.

  2. "version": Здесь указывается версия модуля. "1.0.0" следует семантике версионирования SemVer, где изменения в номерах версии означают различные уровни изменений в модуле.

  3. "description": Краткое описание модуля. В этом случае, "Provides a game info status of players on each added server" говорит о том, что модуль предоставляет информацию о статусе игроков на добавленных серверах.

  4. "authors": Список авторов или разработчиков модуля. Это может быть один человек или команда. Здесь указано ["Flames"].

  5. "providers": Список классов поставщиков услуг, которые использует модуль. Эти классы обычно предоставляют конкретные функциональные возможности или сервисы в контексте модуля. Пример: ["Flute\\Modules\\Monitoring\\ServiceProviders\\MonitoringServiceProvider"].

  6. "dependencies": Описывает зависимости модуля. Это важная часть, поскольку указывает на требуемое программное обеспечение или модули для корректной работы текущего модуля:

    • "php": Минимальная требуемая версия PHP.
    • "flute": Минимальная версия Flute для установки модуля.
    • "extensions": Список требуемых расширений PHP, например, ["xml", "zip"].
    • "modules": Список других модулей, от которых зависит текущий модуль, с указанием их версий. Например, модуль "Shop" версии "0.2.1".
    • "theme": Указывает на зависимость от определённой темы оформления, если таковая имеется, с указанием её версии.