Zum Hauptinhalt springen

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.json aktiviert 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:migrate in 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