Hallo zusammen,
ich würde gerne ein Modul-System entwickeln, bei dem Module aus Doctrine-Entitäten, REST-Controllern und Script-Dateien (JS, CSS, Templates) bestehen. Alle verfügbaren Module sollen in einem Verzeichnis zur Verfügung stehen und werden anhand einer Lizenz dynamisch geladen.
Beispiel:
- Im Verzeichnis liegen die Module a,b,c und d
- Lizensiert sind die Module a und b
- a und b werden geladen, c und d nicht
Aktuell wird das ganze über eine zentrale Modul-Manager-Klasse gesteuert, die einfach die Verzeichnisse ausliest, den Autoloader registriert und die Script-Dateien in zentrale Loader speichert.
Pseudo-Code:
Nun würde ich Module eigentlich lieber als Klassen umsetzen. Dazu habe ich mir mal das Modulsystem des Zend Frameworks angeschaut. Hier würde das Modulverzeichnis etwa so strukturiert:
Der Ansatz ist ganz nett, allerdings finde ich das ganze etwas übertrieben / nicht wirklich intuitiv. Am meisten stört mich die doppelte Autoload-Struktur und der fehlende "globale" Namespace, z.B.:
- Gibt es hier so etwas wie einen PSR oder eine Struktur, die sich durchgesetzt hat?
- Oder ist ein Modul-System grundsätzlich nicht empfehlenswert?
.
ich würde gerne ein Modul-System entwickeln, bei dem Module aus Doctrine-Entitäten, REST-Controllern und Script-Dateien (JS, CSS, Templates) bestehen. Alle verfügbaren Module sollen in einem Verzeichnis zur Verfügung stehen und werden anhand einer Lizenz dynamisch geladen.
Beispiel:
- Im Verzeichnis liegen die Module a,b,c und d
- Lizensiert sind die Module a und b
- a und b werden geladen, c und d nicht
Aktuell wird das ganze über eine zentrale Modul-Manager-Klasse gesteuert, die einfach die Verzeichnisse ausliest, den Autoloader registriert und die Script-Dateien in zentrale Loader speichert.
Pseudo-Code:
PHP-Code:
foreach($moduleDirectoryPaths as $moduleName => $modulePath) {
if($license->isModuleLicensed($moduleName)) {
$moduleManager->load($modulePath);
// load führt durch:
// registerAutoload('module/library', 'Namespace')
// loadCss('module/public/css')
// loadJs('module/public/css')
}
}
Nun würde ich Module eigentlich lieber als Klassen umsetzen. Dazu habe ich mir mal das Modulsystem des Zend Frameworks angeschaut. Hier würde das Modulverzeichnis etwa so strukturiert:
Code:
MeinModul/ Module.php => namespace MeinModul; Class Module... public images css js src => autoload-Eintrag für dieses Modul MeinModul Entity Api test
Code:
/modules/MeinModul/src/MeinModul/... 1--^ 2--^ Es wird der Namespace "MeinModul" genutzt, statt z.B. Andreas/MeinModul
- Gibt es hier so etwas wie einen PSR oder eine Struktur, die sich durchgesetzt hat?
- Oder ist ein Modul-System grundsätzlich nicht empfehlenswert?
.
Kommentar