Модули
Супер-администратор → Модули отображает статус пользовательских модулей, зарегистрированных в вашей установке 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 — отключайте модуль глобально или ограничивайте его доступность определёнными уровнями тарифных планов.
Связанные разделы
- Тарифные планы — управление доступными функциями для каждого уровня подписки
- Состояние системы — мониторинг статуса загрузки модулей и ошибок
- Документация nWidart/laravel-modules — полный справочник по пакету