Skip to content

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:

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 Suffix ServiceProvider haben.

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:

php
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:

php
$user = User::find(1);
$user->myTestModuleProperty;