Skip to content

Hermeneus Module: Einleitung

Hermeneus hat ein Modulsystem in seinen Laravel-Core integriert. Das Modul-System ermöglicht die modulare Erweiterung von Hermeneus, ohne den Core zu modifizieren. Es bietet eine strukturierte Methode zur Organisation von Code in separate, wiederverwendbare Module mit eigenen Controllern, Models, Views und Assets.

Die Module finden sich im /modules-Verzeichnis und können einfach hinzugefügt, entfernt oder deaktiviert werden. Jedes Modul kann unabhängig von anderen Modulen entwickelt und getestet werden.

Sämtliche Module werden in der ModuleRegistry registriert und geladen. Die ModuleRegistry stellt eine zentrale API dar, in der alle Informationen zur Verwendung der Module zur Verfügung stehen.

Hauptfunktionen

  • Plug-and-Play Modul-Integration
  • Standardisierte Modul-Struktur
  • Erweiterbarkeit der App ohne den Core zu modifizieren
  • Automatisches Laden von Modulen
  • Registrierung in der ModuleRegistry
  • Blade-Direktiven Integration

Typen von Modulen

Es gibt mehrere Arten von Modulen in Hermeneus:

  • Services: Module, die eine bestimmte Funktionalität bereitstellen wie z.B. unbestimmte Serviceklassen.
  • Übungen: Übungsmodule, die speziell für die Übungen in Hermeneus entwickelt wurden und auf eine spezielle Core-API (UebungenAPI) zugreifen.

Verzeichnisstruktur

Die Verzeichnisstruktur eines Moduls repräsentiert die Verzeichnisstruktur eines Laravel-Projekts. Ein Modul besteht aus den folgenden Verzeichnissen und Dateien:

plaintext
// Im Ordner /modules/[ModulTyp]

ModulName/
├── app/
│   ├── Models/
│   ├── Controllers/
│   └── .../
├── resources/
│   ├── views/
│   └── .../
├── routes/
├── .../
└── module.json

Modul-Konfiguration

Jedes Modul verfügt über eine module.json-Datei, die die Konfiguration des Moduls enthält. Die Konfiguration enthält Metadaten wie den Modulnamen, den Alias, den Typ, die Beschreibung und die Version des Moduls. Hier ist ein Beispiel für eine module.json-Datei:

json
{
    "module_title": "Mein Modul",
    // Alias des Moduls im kebab-case
    "module_alias": "mein-modul",
    // Modulkategorie (Services, Uebungen, Themes)
    "module_category": "Services",
    "module_description": "Beschreibung",
    "version": "1.0.0",
    "author": "Autor",
    "license": "MIT",
    "moduleNamespace": "Modules\\Services\\MeinModul",
    // Wird das Modul durch ein Hauptmodel repräsentiert?
    "modelNamespace": "",
    "moduleModel": "",
    "controllerNamespace": "Modules\\Services\\MeinModul\\app\\Controllers",
    // Dependencies, z.B. andere Module oder Composer-Pakete
    "dependencies": [
        "vendor\\alias\\package"
    ],
    "frontend": []

}