Startseite
NexoPOS

Dienstanbieter

Ähnlich wie Laravel kann ein Modul einen oder mehrere Service Provider enthalten. In der Regel werden Service Provider verwendet, um Services zu registrieren und zu booten. Außerdem ist dies der Ort, an dem du deine Filter, Actions und Events verwendest, um sie zu verändern, abzufangen und auf sie zu reagieren.

Dienstanbieter werden automatisch geladen, wenn ein Modul aktiviert wird, und alle von ihm definierten Dienste sowie sonstigen Konfigurationen werden in den Request-Lifecycle von NexoPOS eingespeist.

Im Folgenden gehen wir davon aus, dass unser Modulnamespace „MyModule“ ist.

Dienstleister erstellen

Ein Dienstanbieter muss innerhalb des Ordners „Providers“ des Moduls erstellt werden. Der Name der Klasse und die Datei müssen übereinstimmen, um die Kompatibilität mit dem PSR-4-Autoloading sicherzustellen.

<?php
namespace Modules\MyModule\Providers;

use Illuminate\Support\ServiceProvider as CoreServiceProvider;

class ServiceProvider extends CoreServiceProvider
{
    // ...
}

Methode: registrieren

Die Methode „register“ ist der Ort, an dem der Service-Container verwendet wird, um Dinge (Services) zu registrieren. Außerdem ist dies der Ort, an dem Sie auf Events hören und Ihre Aktionen und Filter registrieren können.

<?php
namespace Modules\MyModule\Providers;

use Illuminate\Support\ServiceProvider as CoreServiceProvider;
use Illuminate\Support\Facades\Event;
use App\Events\AfterSuccessfulLoginEvent;
use Modules\MyModule\Filters\MyFilters;
use Modules\MyModule\Events\MyEvent;


class ServiceProvider extends CoreServiceProvider
{
    public function register()
    {
        // registering a module
        Hook::filter( 'ns.dashboard-menus', [ MyFilters::class, 'addMenus' ]);
        
        // registering a service
        $this->app->singleton( MyModuleService::class, fn() => new MyModuleClass( ns()->option->get( 'custom-option' ) ) );
        
        // catch events
        Event::listen( AfterSuccessfulLoginEvent::class, [ MyEvent::class, 'catchSuccessfulLogin' ]);
    }
}

Methode: Booten

Die gleiche Logik, die für die Laravel-„boot“-Methode aus Service Providern funktioniert, gilt auch für diese Methode. Diese Methode wird direkt nach der Methode „register“ aller aktivierten Module aufgerufen.