How To
An einem fiktiven Beispiel-Modul unter dem Alias my-test-module, das im Ordner modules/Services/MyTestModule liegen soll, werden Lösungen für gängige Probleme illustriert.
Vue: Wo registriere ich Vue-Komponenten, die zu meinem Modul gehören?
In modules/Services/MyTestModule/resources/index.js:
import MyModuleComponent from './vue/MyModuleComponent.vue';
export function initModule (VueAppInstance) {
VueAppInstance.component('my-module-component', MyModuleComponent);
/* Hier weitere Komponenten registrieren */
}Die Komponente wird dann automatisch in die Vue-Instanz eingebunden.
Backend: Wie kann ich Core-Funktionalität erweitern, ohne Core-Code zu modifizieren?
- Module können eigene ServiceProvider besitzen. Die ServiceProvider sollten in
modules/Services/MyTestModule/app/Providers/liegen und werden automatisch beim Laden des Moduls registriert. In diesen ServiceProvidern kann man eigene Funktionalität bootstrappen. Achtung: Ein modulspezifischer ServiceProvider muss im entsprechenden Verzeichnis liegen und das SuffixServiceProviderhaben.
Backend: Wo muss mein modulspezifischer ServiceProvider eingebunden werden?
In modules/Services/MyTestModule/app/Providers/ kann ein modulspezifischer ServiceProvider eingebunden werden. Die Modul-ServiceProvider müssen nicht mehr unter /config/app.php registriert werden, da das automatisch durch dem ModuleServiceProvider erledigt wird. Achtung: Ein modulspezifischer ServiceProvider muss im entsprechenden Verzeichnis liegen und das Suffix ServiceProvider haben.
Backend: Ich möchte ein Core-Model um eine modulspezifische Eloquent-Relation erweitern, ohne den Core-Code zu modifizieren.
Dies ist mit Dynamic Relationships possível, die im Modul-ServiceProvider definiert werden können. In modules/Services/MyTestModule/app/Providers/MyTestModuleServiceProvider.php unter der boot()-Methode:
use App\Models\User;
use Modules\MyTestModule\Models\MyTestModuleProperty;
// Dynamisches Relationship für \App\Models\User
User::resolveRelationUsing('myTestModuleProperty', function ($userModel) {
return $userModel->hasOne(MyTestModuleProperty::class);
});Überall in der App, kann die Relation dann wie folgt verwendet werden:
$user = User::find(1);
$user->myTestModuleProperty;