Module
Super Admin → Modules zeigt den Status aller benutzerdefinierten Module, die in Ihrer LeadHub-Installation registriert sind.
LeadHub wird ohne integrierte Funktionsmodule ausgeliefert — das Modulsystem ist ein Erweiterungspunkt für Entwickler, der es Ihnen ermöglicht, neue Funktionen zur Plattform hinzuzufügen, ohne den Kern-Code zu berühren.
Was ist das Modulsystem?
LeadHub verwendet nWidart/laravel-modules, um eine HMVC (Hierarchical Model-View-Controller)-Architektur zu implementieren.
HMVC organisiert Code in eigenständige Module, jedes mit eigenen Routen, Controllern, Modellen, Views, Migrationen und Service-Provider — im Wesentlichen eine Mini-Laravel-Anwendung, die in die Hauptanwendung geladen wird. Das bedeutet:
- Sie können völlig neue Funktionen (neue UI-Bereiche, neue API-Endpunkte, neue Hintergrundjobs) hinzufügen, ohne den Kern zu bearbeiten.
- Module können zur Laufzeit über das Super-Admin-Panel oder über
modules_statuses.jsonaktiviert oder deaktiviert werden. - Jedes Modul wird unabhängig versioniert und kann Abhängigkeiten von anderen Modulen deklarieren.
Installation (bereits in LeadHub enthalten)
Das Paket ist bereits in LeadHub installiert und konfiguriert. Zur Überprüfung:
composer show nwidart/laravel-modules
Die Modulkonfiguration befindet sich in config/modules.php und die Module werden unter Modules/ im Projektstammverzeichnis gespeichert.
Ihr erstes Modul erstellen
# Ein neues Modul generieren
php artisan module:make MyFeature
# Mehrere Module auf einmal generieren
php artisan module:make ModuleA ModuleB ModuleC
# Ohne Standard-Boilerplate-Dateien generieren (absolutes Minimum)
php artisan module:make MyFeature --plain
Nach der Ausführung von module:make wird Ihr Modul unter Modules/MyFeature/ erstellt und automatisch registriert.
Generierte Modulstruktur
Modules/
MyFeature/
app/
Http/
Controllers/ # Routen-Controller
Middleware/ # Modulbezogene Middleware
Requests/ # Formular-Request-Klassen
Models/ # Eloquent-Modelle
Providers/
MyFeatureServiceProvider.php # Haupt-Service-Provider (automatisch geladen)
RouteServiceProvider.php # Lädt routes/web.php + routes/api.php
config/
config.php # Konfiguration auf Modulebene
database/
migrations/ # Modulmigrationen (vom Kern isoliert)
seeders/
factories/
resources/
views/ # Blade-Templates
lang/ # Übersetzungsstrings
assets/ # JS/CSS (kompiliert über Vite)
routes/
web.php # Web-Routen (geladen unter der Middleware-Gruppe 'web')
api.php # API-Routen (geladen unter der Middleware-Gruppe 'api')
tests/ # Funktions- und Unit-Tests
module.json # Modulmetadaten und Abhängigkeitsdeklaration
composer.json # PSR-4-Autoloading für den Namespace dieses Moduls
Erläuterung der wichtigsten Dateien
module.json
Definiert die Identität des Moduls und die Ladereihenfolge:
{
"name": "MyFeature",
"alias": "myfeature",
"description": "Adds custom feature X to LeadHub",
"keywords": [],
"priority": 0,
"providers": [
"Modules\\MyFeature\\Providers\\MyFeatureServiceProvider"
],
"requires": []
}
priority— steuert die Ladereihenfolge; eine niedrigere Zahl wird zuerst geladen. Verwenden Sie dies, wenn Ihr Modul von einem anderen abhängt.requires— Liste der Modul-Aliase, von denen dieses Modul abhängt. LeadHub erzwingt die Abhängigkeit vor dem Laden.
MyFeatureServiceProvider.php
Der Einstiegspunkt Ihres Moduls. Registrieren Sie hier Routen, Middleware, Views, Übersetzungen und Bindungen. Der generierte Provider ruft bereits RouteServiceProvider auf und registriert automatisch die Views und Übersetzungen des Moduls.
config/config.php
Konfiguration auf Modulebene. Zugriff über:
config('myfeature.some_key');
Veröffentlichen und überschreiben Sie die Konfiguration pro Umgebung mithilfe der standardmäßigen Laravel-Konfigurationsveröffentlichung.
Häufig verwendete Artisan-Generatoren
# Controller, Modelle, Migrationen
php artisan module:make-controller MyController MyFeature
php artisan module:make-model MyModel MyFeature
php artisan module:make-migration create_my_table MyFeature
# Requests, Middleware, Policies
php artisan module:make-request StoreMyRequest MyFeature
php artisan module:make-middleware CheckSomething MyFeature
php artisan module:make-policy MyPolicy MyFeature
# Jobs, Events, Listeners, Mail
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-Befehle
php artisan module:make-command MyCommand MyFeature
Migrationen und Seeds ausführen
Modulmigrationen werden getrennt vom Kern aufbewahrt. Führen Sie sie unabhängig aus:
# Alle Module migrieren
php artisan module:migrate
# Ein bestimmtes Modul migrieren
php artisan module:migrate MyFeature
# Zurücksetzen
php artisan module:migrate-rollback MyFeature
# Seed
php artisan module:seed MyFeature
Module aktivieren und deaktivieren
Über die Befehlszeile:
php artisan module:enable MyFeature
php artisan module:disable MyFeature
php artisan module:list # zeigt alle Module und ihren Status an
Über Super Admin → Modules: verwenden Sie den Schalter neben jedem registrierten Modul.
Der Modulstatus wird in modules_statuses.json im Projektstammverzeichnis gespeichert — committen Sie diese Datei in die Versionskontrolle.
Mandantenfähigkeit (Multi-Tenant)
LeadHub ist mandantenfähig. Beachten Sie beim Erstellen von Modulen Folgendes:
- Mandantenbezogene Migrationen: kapseln Sie
module:migratein einem Mandantenkontext, wenn Ihre Migration Tabellen auf Mandantenebene erstellt. - Service-Provider-Isolation: registrieren Sie Middleware, Richtlinien und Event-Listener innerhalb des Service-Providers des Moduls, um den globalen Gültigkeitsbereich nicht zu verunreinigen.
- Funktionssteuerung: kombinieren Sie den Aktivierungs-/Deaktivierungsschalter des Moduls mit dem Plans-System von LeadHub — deaktivieren Sie ein Modul global, oder beschränken Sie es auf bestimmte Plan-Stufen.
Verwandte Themen
- Plans — steuern Sie, welche Funktionen pro Abonnement-Stufe verfügbar sind
- System Health — überwachen Sie den Modulladestatus und Fehler
- nWidart/laravel-modules documentation — vollständige Paketreferenz