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

Модули

Супер-администратор → Модули отображает статус пользовательских модулей, зарегистрированных в вашей установке LeadHub.

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


Что такое система модулей?

LeadHub использует nWidart/laravel-modules для реализации архитектуры HMVC (Иерархическая модель-представление-контроллер).

HMVC организует код в самодостаточные модули, каждый из которых имеет собственные маршруты, контроллеры, модели, представления, миграции и сервис-провайдер — по сути, это мини-приложение Laravel, загружаемое в основное приложение. Это означает:

  • Можно добавлять совершенно новые функции (новые разделы UI, новые конечные точки API, новые фоновые задания) без редактирования ядра.
  • Модули можно включать и отключать во время выполнения из панели супер-администратора или через modules_statuses.json.
  • Каждый модуль версионируется независимо и может объявлять зависимости от других модулей.

Установка (уже включена в LeadHub)

Пакет уже установлен и настроен в LeadHub. Для проверки выполните:

composer show nwidart/laravel-modules

Конфигурация модулей находится в config/modules.php, а сами модули хранятся в директории Modules/ в корне проекта.


Создание первого модуля

# Создать каркас нового модуля
php artisan module:make MyFeature

# Создать каркасы нескольких модулей одновременно
php artisan module:make ModuleA ModuleB ModuleC

# Создать каркас без стандартных файлов шаблона (минимальный набор)
php artisan module:make MyFeature --plain

После выполнения module:make ваш модуль создаётся в директории Modules/MyFeature/ и автоматически регистрируется.


Структура шаблона модуля

Modules/
MyFeature/
app/
Http/
Controllers/ # Контроллеры маршрутов
Middleware/ # Промежуточное ПО уровня модуля
Requests/ # Классы запросов форм
Models/ # Eloquent-модели
Providers/
MyFeatureServiceProvider.php # Основной сервис-провайдер (загружается автоматически)
RouteServiceProvider.php # Загружает routes/web.php + routes/api.php
config/
config.php # Конфигурация уровня модуля
database/
migrations/ # Миграции модуля (изолированы от ядра)
seeders/
factories/
resources/
views/ # Шаблоны Blade
lang/ # Строки переводов
assets/ # JS/CSS (компилируется через Vite)
routes/
web.php # Веб-маршруты (загружаются в группе промежуточного ПО 'web')
api.php # API-маршруты (загружаются в группе промежуточного ПО 'api')
tests/ # Функциональные и модульные тесты
module.json # Метаданные модуля и объявление зависимостей
composer.json # PSR-4 автозагрузка для пространства имён модуля

Описание ключевых файлов

module.json

Определяет идентификацию модуля и порядок загрузки:

{
"name": "MyFeature",
"alias": "myfeature",
"description": "Adds custom feature X to LeadHub",
"keywords": [],
"priority": 0,
"providers": [
"Modules\\MyFeature\\Providers\\MyFeatureServiceProvider"
],
"requires": []
}
  • priority — управляет порядком загрузки; чем меньше число, тем раньше загружается модуль. Используйте это поле, когда ваш модуль зависит от другого.
  • requires — список псевдонимов модулей, от которых зависит данный модуль. LeadHub будет проверять зависимость перед загрузкой.

MyFeatureServiceProvider.php

Точка входа для вашего модуля. Здесь регистрируются маршруты, промежуточное ПО, представления, переводы и привязки. Сгенерированный провайдер уже вызывает RouteServiceProvider и автоматически регистрирует представления и переводы модуля.

config/config.php

Конфигурация уровня модуля. Доступ к ней осуществляется через:

config('myfeature.some_key');

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


Стандартные генераторы Artisan

# Контроллеры, модели, миграции
php artisan module:make-controller MyController MyFeature
php artisan module:make-model MyModel MyFeature
php artisan module:make-migration create_my_table MyFeature

# Запросы, промежуточное ПО, политики
php artisan module:make-request StoreMyRequest MyFeature
php artisan module:make-middleware CheckSomething MyFeature
php artisan module:make-policy MyPolicy MyFeature

# Задания, события, слушатели, почта
php artisan module:make-job ProcessSomething MyFeature
php artisan module:make-event SomethingHappened MyFeature
php artisan module:make-listener HandleSomething MyFeature
php artisan module:make-mail WelcomeMail MyFeature

# Команды Artisan
php artisan module:make-command MyCommand MyFeature

Запуск миграций и сидов

Миграции модулей хранятся отдельно от ядра. Запускайте их независимо:

# Мигрировать все модули
php artisan module:migrate

# Мигрировать конкретный модуль
php artisan module:migrate MyFeature

# Откат
php artisan module:migrate-rollback MyFeature

# Сид
php artisan module:seed MyFeature

Включение и отключение модулей

Из командной строки:

php artisan module:enable MyFeature
php artisan module:disable MyFeature
php artisan module:list # отображает все модули и их статус

Из Супер-администратор → Модули: используйте переключатель рядом с каждым зарегистрированным модулем.

Статус модуля сохраняется в файле modules_statuses.json в корне проекта — зафиксируйте этот файл в системе контроля версий.


Особенности мультиарендности

LeadHub является мультиарендным приложением. При создании модулей учитывайте следующее:

  • Миграции уровня арендатора: оберните module:migrate в контекст арендатора, если ваша миграция создаёт таблицы уровня арендатора.
  • Изоляция сервис-провайдера: регистрируйте промежуточное ПО, политики и слушатели событий внутри сервис-провайдера модуля, чтобы не загрязнять глобальную область видимости.
  • Управление доступом к функциям: комбинируйте переключатель включения/отключения модуля с системой тарифных планов LeadHub — отключайте модуль глобально или ограничивайте его доступность определёнными уровнями тарифных планов.

Связанные разделы