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.